VTEX — loaders & actions
Cookbook completo de loaders/* e actions/* com input/output.
Esta página é o cookbook. Toda função do @decocms/apps/vtex/loaders e @decocms/apps/vtex/actions , com sua forma esperada e quando usar.
Loaders (leitura)
vtex/loaders/intelligentSearch/productDetailsPage.ts
Devolve ProductDetailsPage para uma URL canônica de produto.
{
slug: string; // identificador da URL do produto
}
Devolve ProductDetailsPage | null (null se não encontrado).
vtex/loaders/intelligentSearch/productListingPage.ts
Devolve ProductListingPage para PLP de categoria ou marca.
{
category?: string[]; // segmentos de path da categoria
collection?: string; // ID da coleção
count?: number; // produtos por página, default 24
sort?: string; // chave whitelisted (price:asc, release:desc etc.)
filters?: Record<string, string>;
page?: number;
}
Devolve ProductListingPage | null .
vtex/loaders/intelligentSearch/searchPage.ts
Devolve ProductListingPage para query de busca.
{
query?: string;
count?: number;
sort?: string;
filters?: Record<string, string>;
page?: number;
}
vtex/loaders/intelligentSearch/productList.ts
Devolve Product[] (sem o wrap PDP/PLP). Use para shelves, related products, recently viewed.
{
query?: string;
count?: number; // default 12
sort?: string;
ids?: string[]; // SKU ou productId
collection?: string;
}
vtex/loaders/intelligentSearch/suggestions.ts
Sugestões de autocomplete para uma query parcial.
{ query: string }
Devolve { products: Product[]; suggestions: string[] } .
vtex/loaders/intelligentSearch/topSearches.ts
Buscas top do dia (sem props).
vtex/loaders/cart.ts
Devolve o orderForm corrente como Cart .
{} // sem props; lê o cookie do orderForm
Devolve Cart (orderForm vazio se nenhum cookie).
vtex/loaders/user.ts
Devolve o usuário logado.
{}
Devolve User | null .
vtex/loaders/wishlist/list.ts
Devolve a wishlist do usuário.
{ count?: number }
Devolve Product[] .
vtex/loaders/orders/list.ts
Lista de pedidos do usuário.
{ page?: number; perPage?: number }
Devolve { list: Order[]; pageInfo: PageInfo } .
vtex/loaders/legacy/productList.ts
Mesmo que IS productList, mas usa Catalog API legado. Use só se Intelligent Search não estiver configurado.
vtex/loaders/legacy/categoryTree.ts
Árvore de categorias para nav.
{ depth?: number }
Devolve Category[] aninhadas.
vtex/loaders/legacy/collections.ts
Lista de coleções.
{}
vtex/loaders/postalCode/regionId.ts
Resolve um CEP para regionId de VTEX (necessário para precisão de estoque/preço).
{ postalCode: string; country?: string }
Devolve { regionId: string; salesChannel: string } | null .
vtex/loaders/sellers/list.ts
Sellers ativos para o sales channel atual.
{ count?: number }
Actions (mutações)
vtex/actions/cart/addItems.ts
{ items: { id: string; quantity: number; seller?: string }[] }
Devolve Cart atualizado.
vtex/actions/cart/removeItems.ts
{ index: number } // posição no orderForm
vtex/actions/cart/updateItems.ts
{ orderItems: { index: number; quantity: number }[] }
vtex/actions/cart/updateCoupon.ts
{ text: string }
vtex/actions/cart/updateClientPreferences.ts
{ locale?: string; optInNewsletter?: boolean }
vtex/actions/cart/updateProfile.ts
{ email: string }
vtex/actions/cart/changeRegion.ts
{ postalCode: string; country?: string }
Atualiza o orderForm com regionId.
vtex/actions/wishlist/add.ts
{ productId: string; sku?: string }
vtex/actions/wishlist/remove.ts
{ id: string }
vtex/actions/user/signIn.ts
{ email: string; password: string }
Devolve { ok: boolean; redirect?: string } .
vtex/actions/user/signUp.ts
{ email: string; firstName: string; lastName: string; password: string }
vtex/actions/user/signOut.ts
{}
vtex/actions/newsletter/subscribe.ts
{ email: string; name?: string }
Padrões
Chamada do client (preferida)
import { invoke } from "~/server/cms/invoke.gen";
const cart = await invoke["vtex/actions/cart/addItems.ts"]({
items: [{ id: "12345", quantity: 1 }],
});
Tipado e cuidado pelos hooks do TanStack Query (via useCart etc.).
CMS multistep
Se o autor de conteúdo precisar configurar uma instância de loader (e.g. uma prateleira de produto na home), o CMS embrulha o __resolveType e props num block:
{
"__resolveType": "vtex/loaders/intelligentSearch/productList.ts",
"query": "tênis",
"count": 12
}
Section pega o resultado como uma prop:
export interface Props {
loader: { __resolveType: string };
}
export const loader = (props: Props, _req, ctx) => ctx.invoke(props.loader);
export default function Shelf({ products }: Props & { products: Product[] }) { /* ... */ }
Pegadinha de sort whitelist
O parâmetro sort em loaders IS é validado contra uma whitelist ( price:asc , price:desc , release:desc , name:asc , score:desc etc.). Valores fora da whitelist resetam para o default do servidor.
Causas comuns: passar sort=relevancia (deveria ser score:desc ) de uma migração antiga.
Veja sortwhitelist.ts para a lista exata.
Veja também
Found an error or want to improve this page?
Edit this page