Erros comuns (temas e agências)
Guia rápido para evitar bugs recorrentes ao consumir a Storefront Data API.1. Imagem de categoria/coleção
❌ Errado
[object Object] e a imagem quebra.
✅ Correto
Produtos seguem o mesmo padrão: use
product.featuredImage?.url ou getProductImage(product).
2. Coleção ≠ entidade separada
Filtrar produtos por coleção:
3. useCorvexData e formato do retorno
O hook legado retorna Connection<T> com nodes. Sempre normalize:
data é array.
4. limit vs first
5. Produtos por categoria + status
❌ Evite
✅ Prefira
6. Picker collection salva UUID
No inspector, type: "collection" persiste o UUID da categoria, não o handle:
collection / categoryId na query de produtos.
7. Contexto de página vs fetch extra
Em template product, a plataforma já injeta o produto:❌ Redundante na PDP
page.collection e page.products — não busque de novo sem motivo.
8. Blocks e snippets não fazem fetch
Só sections (viadefineSectionData ou useCorvexData no componente da section) buscam catálogo.
9. available vs inStock
Código legado usava available: true. A API pública espera:
10. Aliases de ordenação
O SDK aceita aliases comuns de ordenação e normaliza para o backend:11. Preview no editor (URL)
Além de?theme= e ?version=, o editor persiste estado de preview:
Exemplo:
12. Preview responsivo no editor
O canvas do editor reduz a largura do container (390px mobile, 768px tablet), mas@media e window.matchMedia usam a janela do browser por padrão.
O host emula o device quando você troca o ícone Desktop / Tablet / Mobile:
- Reaplica regras CSS do tema como se a viewport tivesse a largura do device
- Patcheia
matchMediapara JS que usa breakpoints (ex.: menu mobile)
category.image?.url e, se usar window.innerWidth / matchMedia, considere useEditorPreviewState ou CSS puro com @media.
Recarregue o editor após atualizar o host. O preview em /preview e no celular real não precisam dessa emulação.
13. Editor — blocks e carrossel
Erros do canvas, não da Data API.
Nunca:
- Renderizar
{children}em dois lugares. - Usar
SectionBlockCanvasna vitrine publicada. - Chamar um callback dentro de
setPage((current) => { … return next }).
14. Vazamento de CSS (tema para o builder)
No editor, tema e builder compartilham a mesma página. Se o tema grava cores em:root ou em document.documentElement, a UI do editor herda essas variáveis.
❌ Errado
✅ Correto
Defina variáveis só nas raízes do tema (layout, header, footer):
A plataforma aplica settings do painel Tema em
.cx-theme-scope — o CSS do tema também deve ficar escopado.
Guia completo: Escopo CSS — tema vs editor.
15. Canvas do builder branco
Sintoma
/previewe vitrine ok- Canvas do editor (
/?store=…) branco, sem erro no console - Seções aparecem na árvore lateral
Causas
✅ Correto
16. Vídeo com UUID no src
❌ Errado
✅ Correto
Guia completo: Biblioteca de vídeos · FAQ.
17. Carrossel de vídeos e loop HLS
❌ Errado — recriar HLS quando visibilidade muda
playWhenVisibleem faixa marquee com autoplay (observer instável com animação CSS)video.src = manifest.m3u8após erro fatal do Hls.js- Resolver UUID / fetch de
/playbackdentro do block em vez do snippetCorvexVideo
✅ Correto
Guia completo: Carrossel de vídeos (Reels).
18. Grade de produtos — snippet vs blocos de catálogo
❌ Errado — misturar modelos na mesma expectativa
- Editar blocos na seção Início (
main) e esperar que o carrossel Vitrine de produtos (product-list+ snippet) mude. - Repetir
renderCatalogProductBlockscomblocksdesatualizados no editor semuseSectionLiveBlocks(). - Colocar
typeerrado emblocks[id](todoscatalog-product-image) — sintoma: várias imagens, sem título/descrição. orderno template apontando para"main"sem objetosections.maincomblocks+block_order.
✅ Correto
- Snippet:
import ProductCard from '@corvex/snippets/product-card'— card fixo; customização via settings da section ou props do snippet. Ver Product Card. - Blocos de catálogo: section busca produtos; cada item da grade usa a mesma
block_order; blocks leem produto via contexto. Ver Grade com blocos de catálogo. - Persistência:
blockseblock_order(template e publicação). No editor,useSectionLiveBlocks()espelha os tipos ao vivo. - O tipo é a pasta
blocks/{id}/. Seschema.jsontivertype, use o mesmo id.nameé o rótulo no editor e pode mudar. - No editor, monte
{children}no primeiro card da grade — não em host oculto comclip/aria-hidden(seleção de bloco fica desalinhada).
Checklist antes de publicar section
- Imagens usam
.urlouimageUrl, nunca objetoImagenosrc - Listas normalizam
data.nodes - Filtro por coleção usa UUID do picker
-
inStockem vez destatus=PUBLISHEDcom categoria - Snippets/blocks não chamam API
- PDP/collection usam
usePage()quando aplicável - Sections com blocks:
{children}uma vez, sem propriedade estática no componente,corvex builde sync. Runtime API - Carrossel com blocks: não mapear
childrencomo slides - Vídeo: nunca
src={uuid}— usarCorvexVideoou classificar valor (guia) - Carrossel de vídeos: HLS não recriado em
shouldPlay— ver Carrossel de vídeos - CSS escopado: sem
:rootglobal; builder não herda cores do tema — Escopo CSS - Builder iframe não branco:
editorPreviewRootClasses+ regras iframe — Compatibilidade iframe

