Construir um bloco de exibição personalizado
No NocoBase, os blocos são as áreas de conteúdo da página. Este exemplo mostra como criar um bloco personalizado bem simples com BlockModel — que permite editar conteúdo HTML pela interface, com o usuário modificando o conteúdo exibido pelo painel de configuração.
Este é o primeiro exemplo que envolve FlowEngine; vamos usar BlockModel, renderComponent, registerFlow e uiSchema.
É recomendável conhecer os seguintes tópicos antes:
- Escreva seu primeiro plugin — criação do plugin e estrutura de diretórios
- Plugin — entrada do plugin e ciclo de vida
load() - Visão geral do FlowEngine — uso básico de FlowModel, renderComponent, registerFlow
- i18n internacionalização — escrita de arquivos de tradução e uso de
tExpr()para tradução adiada
Resultado final
Vamos criar um bloco "Simple block":
- Aparece no menu "Adicionar bloco"
- Renderiza o conteúdo HTML configurado pelo usuário
- Permite que o usuário edite o HTML pelo painel de configuração (registerFlow + uiSchema)
O código-fonte completo está em @nocobase-example/plugin-simple-block. Se quiser executar localmente para ver o resultado:
A seguir, montamos esse plugin do zero, passo a passo.
Passo 1: criar o esqueleto do plugin
Na raiz do repositório, execute:
Isso gera a estrutura de arquivos básica em packages/plugins/@my-project/plugin-simple-block. Para mais detalhes, veja Escreva seu primeiro plugin.
Passo 2: criar o modelo do bloco
Crie src/client-v2/models/SimpleBlockModel.tsx. Este é o núcleo do plugin — define como o bloco é renderizado e como ele é configurado.
Pontos-chave:
renderComponent()— renderiza a UI do bloco, lendo o conteúdo HTML viathis.props.htmldefine()— define o nome exibido do bloco no menu "Adicionar bloco".tExpr()é usado para tradução adiada, porquedefine()é executado no momento de carregamento do módulo, quando o i18n ainda não está inicializadoregisterFlow()— adiciona o painel de configuração.uiSchemadefine o formulário usando JSON Schema (consulte a sintaxe em UI Schema); ohandlergrava o valor preenchido pelo usuário emctx.model.props, e orenderComponent()consegue lê-lo
Passo 3: adicionar arquivos multilíngues
Edite os arquivos de tradução em src/locale/ do plugin, adicionando todas as chaves usadas em tExpr():
Adicionar um novo arquivo de idioma pela primeira vez requer reiniciar a aplicação para ter efeito.
Para mais informações sobre escrita de arquivos de tradução e uso de tExpr(), veja i18n internacionalização.
Passo 4: registrar no plugin
Edite src/client-v2/plugin.tsx e use registerModelLoaders para carregar o modelo sob demanda:
registerModelLoaders usa import dinâmico; o código do modelo só é carregado quando realmente for usado pela primeira vez — esta é a forma de registro recomendada.
Passo 5: ativar o plugin
Após ativar, crie uma nova página e clique em "Adicionar bloco" — você verá "Simple block". Após adicioná-lo, clique no botão de configuração do bloco para editar o conteúdo HTML.
Código-fonte completo
- @nocobase-example/plugin-simple-block — exemplo completo de bloco de exibição personalizado
Resumo
Capacidades usadas neste exemplo:
Links relacionados
- Escreva seu primeiro plugin — criar o esqueleto do plugin do zero
- Visão geral do FlowEngine — uso básico do FlowModel e registerFlow
- FlowEngine → Extensão de blocos — BlockModel, DataBlockModel, CollectionBlockModel
- UI Schema — referência da sintaxe de uiSchema
- Component vs FlowModel — quando usar FlowModel
- Plugin — entrada do plugin e ciclo de vida load()
- i18n internacionalização — escrita de arquivos de tradução e uso de tExpr
- Documentação completa do FlowEngine — referência completa de FlowModel, Flow e Context

