Skip to main content

Section Contract

Uma section é um componente React que ocupa uma região da página. O lojista configura textos, cores e outros campos no Editor; sua section recebe esses valores e renderiza o HTML.

Arquivos da section

Para cada ID listado em theme.json → sections:

Registro no tema

  1. O ID da pasta (hero, faq, …) precisa estar em theme.json → sections[].
  2. section.jsx exporta o componente como default export.
  3. Convém nomear o componente {PascalCase}Section — ex.: pasta hero → HeroSection.
O comando corvex build inclui o componente no bundle do tema. A CLI anexa metadados no bundle — não copie isso no section.jsx: O name do inspector vem de schema.json → name. Não declare propriedade estática no componente.

Identidade: type estável, name livre

O ID da seção é a pasta. A CLI descobre o componente por esse nome. Se schema.json tiver type, use o mesmo id. Não mude a pasta depois que existem páginas. name é o rótulo da paleta e do inspector. Pode traduzir, acrescentar marca ou “(legado)”. O editor associa o nó a esse rótulo e também aceita o id da pasta e os nomes antigos do lockfile. Nós que já abrem não são reescritos. schema.identity.json guarda o name atual e os nomes já vistos (sectionAliases / blockAliases). O corvex validate não recusa rename. Commite o arquivo: o build injeta os nomes antigos no bundle para rascunhos velhos abrirem. Opcional: nameAliases no próprio schema.json se um rascunho usa um texto que o lockfile ainda não viu. Não atribua propriedade no section.jsx. Não apague o lockfile. Não mude o id da pasta / type se páginas já existem.

schema.json

Descreve como a section aparece no Editor e quais campos o lojista pode editar. Detalhes dos campos: Schema Contract. Dados: Data Contract.

Props do componente

Quando a Corvex renderiza sua section, ela chama seu componente React com estas props: Exemplo mínimo:
Leia sempre de settings — não espere title direto na raiz das props, nem uma prop config.

Valores iniciais (defaults)

Use o campo default em cada setting do schema.json:
No componente, use fallbacks seguros para o primeiro render:
Quando o lojista adiciona a section pela paleta, o Editor usa esses defaults.

Schema e dados no mesmo arquivo (opcional)

Você pode exportar metadados junto com o componente:
Use defineSectionData quando a busca de dados é mais complexa que as chaves simples de schema.data.

Edição inline (opcional)

Para permitir que o lojista edite texto direto no preview:
  • SectionChrome — envolve a section no builder
  • InlineText — field text/textarea da section (propKey = id do schema)
  • BlockInlineText — field text/textarea de um block (fieldKey = id do schema)
Duplo clique funciona no builder com Inspecionar ativo. Guia completo: Runtime API — edição inline.

Sections com blocks

Se a section contém subcomponentes editáveis (título, item de FAQ, slide, …):
  1. Crie sections/{id}/blocks.json:
  1. Na página, cada instância da section guarda blocks e block_order — ver Block Contract.
  2. No JSX, no canvas do editor, renderize os blocos com {children} dentro de SectionBlockCanvas. Use block_order e blocks só como fallback da vitrine. Não desenhe cards manuais no editor. Veja Runtime API — blocos.
O arquivo blocks.json informa ao Editor quais tipos o lojista pode adicionar. Sem ele (e sem CLI ≥ 2.3.4), o canvas fica só com o chrome da section e {children} vazio. Slides/itens visíveis antes do lojista editar: declare-os em templates/*.json, não no JSX. theme-defaults.

Fazer / não fazer (section.jsx)

Fazer

  • Leia settings.{id} (mesmo id do schema.json).
  • Canvas: um SectionBlockCanvas e {children} direto — sem .map / hidden em cada child.
  • Contagem de slides: useSectionBlockCount().
  • Empty state quando a contagem é 0. Looks iniciais em templates/*.json.

Não fazer

defineSection() no JSX continua opcional para loaders de dados. Isso não substitui o schema.json em disco.

Erros


enabledOn

Quando presente, a section só aparece na paleta dos templates listados. Valores aceitos pelo validador: index, product, collection, category, search, cart, page, blog, article, 404, password, maintenance. Omita enabledOn para permitir a seção em qualquer página. Array vazio é inválido. 404, password e maintenance são templates recomendados, não obrigatórios. Ver Páginas de sistema.

Chaves de schema.data

products, product, collection, collections, categories, cart, discount_ranges, payment_discounts, coupons, search, recommendations, reviews, reviews_summary, blog, article, page

O que evitar

  • Buscar produtos ou coleções sem declarar data no schema ou um loader explícito.
  • Usar contexts no schema — em V2 use enabledOn.
  • Usar tipos de campo que não estão na lista estável (Schema overview).
  • Assumir que o lojista já preencheu um campo — sempre trate valores vazios.

Exemplo mínimo válido

sections/hello/schema.json:
sections/hello/section.jsx:
theme.json → "sections": [ "hello", … ]

Veja também