Returning React Components Inside a Service: Anti-Pattern?

Is this an anti-pattern to return react components inside a service. The use case here is to have many services for different field types to pull out unique components for that field type (like form fields)

export class TextFieldService extends Effect.Service<TextFieldService>()(
    'TextFieldService',
    {
        effect: Effect.gen(function* () {
            const mock = () => faker.lorem.word()

            const makeReactComponent = () => {
                return <div>Hello</div>
            }
            return {
                // Business Logic
                mock,
                defaultValue: () => '',
                // UI Components Specific to this field type
                makeReactComponent,
            } as const
        }),
    }
) {}
const layers = Layer.mergeAll(TextFieldService.Default)
const runtimeRx = Rx.runtime(layers)

export const fieldRx = runtimeRx.rx(
  Effect.gen(function* () {
    const fieldService = yield* TextFieldService
    return fieldService.makeReactComponent()
  }),    
)

function ReactComponent() {
    const fieldValue = useRxValue(fieldRx)
    return <div>{fieldValue}</div>
}
Was this page helpful?