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 emtheme.json → sections:
Registro no tema
- O ID da pasta (
hero,faq, …) precisa estar emtheme.json→sections[]. section.jsxexporta o componente como default export.- Convém nomear o componente
{PascalCase}Section— ex.: pastahero→HeroSection.
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:
settings — não espere title direto na raiz das props, nem uma prop config.
Valores iniciais (defaults)
Use o campodefault em cada setting do schema.json:
Schema e dados no mesmo arquivo (opcional)
Você pode exportar metadados junto com o componente: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 builderInlineText— fieldtext/textareada section (propKey=iddo schema)BlockInlineText— fieldtext/textareade um block (fieldKey=iddo schema)
Sections com blocks
Se a section contém subcomponentes editáveis (título, item de FAQ, slide, …):- Crie
sections/{id}/blocks.json:
-
Na página, cada instância da section guarda
blockseblock_order— ver Block Contract. -
No JSX, no canvas do editor, renderize os blocos com
{children}dentro deSectionBlockCanvas. Useblock_ordereblockssó como fallback da vitrine. Não desenhe cards manuais no editor. Veja Runtime API — blocos.
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}(mesmoiddoschema.json). - Canvas: um
SectionBlockCanvase{children}direto — sem.map/hiddenem 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
datano schema ou um loader explícito. - Usar
contextsno schema — em V2 useenabledOn. - 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", … ]