Skip to content

O Motor de Renderização

Sistema que controla como cada tipo de componente é renderizado — a "ponte" entre componentes React/Vue e a lógica de apresentação.

Renderer

O sistema de Renderer decide qual wrapper usar para cada tipo de componente:

O Que São Renderers:

Tipo de RendererFunçãoUsado ParaExemplo
fieldRenderiza campos de formulárioInputText, Select, etc.Vincula ao adapter de formulário, passa props
buttonRenderiza botõesSubmitButtonComportamento de botão
containerRenderiza containers de formulárioFormGroup, SectionOrganiza layout
contentRenderiza conteúdo estáticoTítulos, labelsExibição simples
menu-itemRenderiza itens de menuMenuLink, MenuButtonNavegação (quando MenuFactory é usado)
menu-containerRenderiza containers de menuMenuContainerHierarquia de menu
addonRenderiza addonsUI de complementoConteúdo suplementar

Como Funcionam:

Componente → Renderer → DOM

text
InputText Component → FieldRenderer → <input> + binding de formulário + props

O Renderer Adiciona:

  • Binding com adapter de formulário (ex.: value, onChange do contexto de formulário Schepta)
  • Injeção de contexto (valores do formulário, contexto externo)
  • Transformação de props específica por tipo

Resultado: Componentes focam na UI, Renderers focam na lógica de apresentação!

Tipos de Renderer

Field Renderer - Campos de Formulário:

ResponsabilidadeImplementaçãoBenefício
Integração com formulárioAdapter de formulário (ex.: useScheptaFormAdapter no React)value e onChange ligados ao estado do formulário
PropsRecebe name, component, componentPropsRenderização consistente de campos
Renderers customizadosOverride via renderers.fieldUsar com React Hook Form, Formik, etc.

Container Renderer - Layout e Organização:

ResponsabilidadeImplementaçãoBenefício
Ordenação de filhosOrdenação por x-ui.orderLayout automático
Filtragem de propsRemover props de containerProps limpas
Gerenciamento de seçõesAgrupar itens relacionadosOrganização visual

Content e Button Renderers:

  • content: Conteúdo estático (títulos, texto). Processamento mínimo.
  • button: Componentes de botão (ex.: SubmitButton). Tipo button na spec do componente.

Como o Sistema Funciona

Pipeline de Resolução:

Schema JSON

Detectar Tipo (tipo da spec: field, container, button, content, ...)

Escolher Renderer (Default → renderers do ScheptaProvider → renderers da Factory)

Preparar Props (Merge + contexto)

Aplicar Middleware (ex.: expressões de template)

Renderizar (Renderer envolve o componente)

Elemento React/Vue Final

Hierarquia de Resolução:

Como o sistema escolhe qual renderer usar:

PrioridadeFonteQuando UsarExemplo
1ª - DefaultBuilt-in da factoryComportamento padrãoDefaultFieldRenderer para tipo field
2ª - GlobalScheptaProviderPadrão da aplicação<ScheptaProvider renderers={{ field: AppFieldRenderer }} />
3ª - LocalProps da factoryOverride por factory<FormFactory renderers={{ field: CustomField }} />

Não existe API separada "registerRenderer"; os renderers vêm dos defaults da factory, depois dos renderers do Provider, depois da prop renderers da factory.

Por Que os Renderers Existem

Separação de responsabilidades:

  • Componentes definem a UI (input, botão, container).
  • Renderers os envolvem com binding de formulário, layout ou outro comportamento. O field renderer padrão usa o adapter de formulário do Schepta para que os campos funcionem sem uma biblioteca de formulário específica; você pode substituí-lo por um renderer customizado que use React Hook Form ou Formik.

Conceitos Relacionados

Renderers são o "motor" que conecta outros conceitos: