Skip to content

O Motor de Renderização

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

Renderer

Renderer System é o que decide qual wrapper usar para cada tipo de componente:

🔧 O Que São Renderers:

Renderer TypeFunçãoUsado ParaExemplo
fieldRenderiza campos de formulárioInputText, Select, etc.Adiciona validação automática
containerRenderiza containers de formsFormGroup, SectionOrganiza layout
menu-itemRenderiza itens de menuMenuLink, MenuButtonAdiciona navegação
menu-containerRenderiza containers de menuMenuContainerOrganiza hierarquia
contentRenderiza conteúdo estáticoText, ImageDisplay simples

📊 Como Funcionam:

Component → Renderer → DOM

text
InputText Component → FieldRenderer → <input> + validation + props

Renderer Adds:

  • Middleware pipeline automático
  • Context injection (form, menu)
  • Props transformation específica do tipo
  • Error boundaries integradas

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


🚀 Tipos de Renderer

Cada tipo de renderer tem responsabilidades específicas:

📝 Field Renderer - Campos de Formulário:

ResponsabilidadeImplementaçãoBenefício
Form IntegrationuseFormContext() automáticoProps do form injetadas
Validation PipelinewithCpfValidation, withRulesValidação automática
Dynamic PropsuseReactions()Props mudam baseado em state
Debug IntegrationuseDebug()Debug visual automático

🏗️ Container Renderer - Layout e Organização:

ResponsabilidadeImplementaçãoBenefício
Child Orderingx-ui.order sortingLayout automático
Props FilteringRemove container propsProps limpos
Layout LogicResponsive layoutUI adaptativa
Section ManagementGroup relacionadosOrganização visual

🧭 Menu Renderers - Navegação:

RendererFunçãoFeatures
menu-itemIndividual menu itemsLink handling, active states
menu-containerMenu organizationHierarchy, ordering, responsive

📄 Content Renderer - Display:

FunçãoUsoCaracterísticas
Static ContentText, images, etc.No form integration
Minimal ProcessingDirect renderingPerformance otimizada

⚙️ Como o Sistema Funciona

Fluxo conceitual de como renderers processam components:

🔄 Resolution Pipeline:

Schema JSON

Detectar Tipo (Qual renderer usar?)

Buscar Renderer (Na hierarquia de prioridade)

Preparar Props (Merge + context)

Aplicar Middleware (Transform + validate)

Renderizar (Component + wrapper)

React/Vue Element Final

🎯 Hierarquia de Resolução:

Como o sistema escolhe qual renderer usar:

PrioridadeFonteQuando UsarExemplo
1º - LocalProps do FactoryCustomização específica<FormFactory renderers=\{\{field: CustomField\}\} />
2º - GlobalscheptaProviderPadrão da aplicação<scheptaProvider renderers=\{\{field: AppField\}\} />
3º - RegistryregisterRenderer()Extensões globaisregisterRenderer('field', LibField)
4º - DefaultSistema built-inComportamento padrãoFieldRenderer interno

⚡ Orquestrador Central:

O "maestro" que coordena todo o processo:

Responsabilidades:

  • Detecta qual tipo de component renderizar
  • Escolhe o renderer apropriado da hierarquia
  • Prepara props mesclando contextos
  • Aplica middleware pipeline específica do tipo
  • Renderiza o component final com seu wrapper

🤝 Por Que Existem Renderers

Os problemas que o sistema de renderers resolve:

🎯 Separação de Responsabilidades:

Sem renderers, cada component precisa:

  • Misturar lógica de UI com lógica de negócio
  • Gerenciar context de forma manual e inconsistente
  • Implementar validação específica em cada field
  • Transformar props de forma ad-hoc e não padronizada

Com renderers, components se tornam:

  • Mais limpos: foco exclusivo na apresentação visual
  • Mais consistentes: context injection automática e padronizada
  • Mais reutilizáveis: validation e logic encapsuladas no renderer
  • Mais previsíveis: props transformation segue padrões estabelecidos

🔄 Flexibilidade do Sistema:

O mesmo component pode ter comportamentos diferentes:

  • Form Field: FieldRenderer adiciona validation + form integration
  • Read-only Display: ContentRenderer mantém display simples, sem form logic
  • Menu Item: ItemRenderer adiciona navigation + active state
  • Custom App: CustomRenderer implementa behavior específico da aplicação

Isso permite: multi-tenant apps, A/B testing, integração com diferentes UI libraries, e extensões customizadas sem modificar components base.


💡 Conceitos Relacionados

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