用途:本技能面向 Storefront Next 的客户端状态管理,采用服务端优先的数据加载思路。业务数据保留在服务端(loader/action),客户端状态仅用于 UX 连续性。
主要能力与机制分工:服务端数据用 React Router loader(如商品详情、分类列表);应用级客户端状态用 React context provider(如会话显示状态、basket 快照/水合状态);功能级客户端状态用 Zustand store(如门店定位弹窗/搜索状态);数据变更用 React Router action(服务端,如加购、更新资料)。
Zustand 模式:在功能级(通常为扩展)创建 store,例如 src/extensions/store-locator/stores/store-locator-store.ts,使用 zustand/vanilla 的 createStore,定义状态(isOpen、mode、selectedStoreInfo)与动作(open、close、setSelectedStoreInfo),并支持 init 部分初始化。
Context 集成:通过 provider/hook 暴露应用级状态,如 import { useBasket, useBasketSnapshot } from '@/providers/basket'; 在组件中取 basket 与快照,计算 itemCount。
变更后同步:变更保留在服务端,并在 action 中更新请求上下文的资源,例如使用 getBasket、updateBasketResource,调用 basket.addItemToBasket 后调用 updateBasketResource(context, updatedBasket) 并返回 data。
最佳实践:服务端优先;应用状态用 provider;Zustand 限功能局部复杂场景;在服务端 action 内同步 basket/auth 资源;仅存无法廉价派生的状态。
选型参考:页面加载商品数据用 loader;购物车角标用 basket provider hooks;复杂扩展 UI 流程用 Zustand;搜索结果用 loader;加购用服务端 action + 资源更新。
限制:资料未说明具体版本、安装命令、收费与性能指标;相关技能含数据加载、认证与组件使用。