Pular para o conteúdo principal

Como funciona

Ao final desta página

Você vai saber em qual camada mexer quando precisar mudar algo — e qual camada deixar quieta.

As camadas​

CatalogApp é uma casca fina. Ele renderiza o CatalogProvider mais um roteador com as páginas prontas. Tudo que importa está abaixo dele.

Leia como três perguntas:

  1. Qual é a cara da loja? ThemeProvider — um dos 50 temas ou o seu, via defineTheme. Veja Temas.
  2. O que a loja sabe sobre si mesma? SiteConfigProvider — nome, moeda, WhatsApp, chave Pix, IDs de analytics, cupons. Veja Configuração.
  3. De onde vêm os produtos? DataProviderWrapper — os dados de demonstração, sua API REST, ou quaisquer funções assíncronas que você escrever. Veja Data providers.

Todo o resto — carrinho, lista de desejos, comparador, vistos recentemente, autenticação, idioma e modo de cor — é estado local persistido em localStorage.

Escolhendo o ponto de entrada​

Você quer…UseO que abre mão
Publicar uma loja inteira agora<CatalogApp />Os layouts das páginas são nossos
Manter suas páginas e suas rotas<CatalogProvider /> + hooksVocê constrói a interface
Usar uma peça em um app existenteImportar o componente diretoOs contextos ainda precisam estar acima

CatalogApp aceita as mesmas props do CatalogProvider e repassa: defaultTheme, customTheme, defaultLanguage, config, dataProvider.

// Pronto para usar
<CatalogApp defaultTheme="coffee" config={{ companyName: 'Roast & Beans' }} />

// Headless: mesmos providers, sua própria árvore
<CatalogProvider dataProvider={meuProvider} config={{ companyName: 'Roast & Beans' }}>
<MeuHeader />
<MinhaGradeDeProdutos />
</CatalogProvider>

O fluxo de checkout​

Checkout é a parte que mais projetos precisam mudar, então é deliberadamente rasa: um hook, e um adaptador trocável por método de pagamento.

Um adaptador é só (payload: CheckoutPayload) => Promise<PaymentResult>. Para integrar um PSP que o PlugStore não traz, escreva essa função e passe para o useCheckout. Veja Checkout.

Onde o estado mora​

Todo provider persiste em localStorage com uma chave estável, para que quem volta encontre o carrinho e as preferências:

EstadoProviderChave no localStorage
Tema selecionadoThemeProviderecom-template (+ ecom-template-default)
Configuração da lojaSiteConfigProviderecom-site-config
CarrinhoCartProviderecom-cart
Lista de desejosWishlistProviderecom-wishlist
ComparaçãoCompareProviderecom-compare
Vistos recentementeRecentlyViewedProviderecom-recently-viewed
Pedidos, endereçosAccountProviderecom-orders, ecom-addresses
Modo de corColorModeProviderecom-color-mode

Isso importa em um caso específico: defaultTheme é um valor inicial. Quando alguém já tem um tema guardado, mudar a prop sozinha não move essa pessoa — o provider registra qual default gerou o valor guardado e só sobrescreve quando você de fato muda a prop. Veja Temas.

Próximos passos​