📦 Cart Management — React 购物车状态管理

v1.0.0

提供 React 购物车状态管理解决方案,包括防止重复添加、localStorage 持久化、CartContext 模式。适用于构建或修复购物车、产品列表等场景。

0· 468·2 当前·3 累计
下载技能包
License
MIT-0
最后更新
2026/2/26
0
安全扫描
VirusTotal
无害
查看报告
OpenClaw
安全
medium confidence
该技能与其声明的目的(React 购物车状态模式)一致,但运行时指令中包含实现错误和不完整的指导(localStorage/SSR/XSS 隐患和过时状态竞争条件),开发者应注意。
评估建议
该技能看起来是如其所言(React 购物车模式),且没有不寻常的外部要求。使用建议代码前,请:1) 修复过时状态 bug;2) 避免复制派生状态;3) 为服务器端渲染保护 localStorage 使用;4) 避免存储敏感信息;5) 考虑延迟或批量持久化以安全处理并发更新。这些是实现质量和安全相关问题,而非恶意行为的迹象。...
详细分析 ▾
用途与能力
名称/描述(React 购物车管理、防止重复、localStorage 持久化、CartContext 模式)与 SKILL.md 指令匹配。没有不相关的二进制文件、环境变量或安装程序被请求。
指令范围
指令保持在购物车管理范围内,但包含实际问题:示例将 localStorage 写入 [...cartItems, item](不使用函数式 'prev' 值),可能导致过时状态/竞争 bug;它复制了派生状态(购物车 ID),可能导致不一致;它没有提到为 SSR 保护 localStorage 访问(窗口可能未定义)或处理 JSON.parse 错误。另外,没有关于 localStorage 可被页面脚本访问(XSS 风险)的警告。
安装机制
仅指令的技能,无安装规范或下载。低安装风险 — 安装程序不会将内容写入磁盘。
凭证需求
没有请求凭证、环境变量或配置路径。声明的要求对于描述的客户端任务来说是最小的和合适的。
持久化与权限
always 为 false,该技能不请求持久平台权限或修改其他技能。它仅推荐使用浏览器 localStorage,适合客户端购物车模式,但具有通常的浏览器存储权衡。
安全有层次,运行前请审查代码。

License

MIT-0

可自由使用、修改和再分发,无需署名。

运行时依赖

无特殊依赖

版本

latestv1.0.02026/2/22

初始发布:提供强大的 React 购物车状态管理模式。- 通过 CartContext 中的产品 ID 跟踪防止重复添加。- 将购物车状态和产品 ID 持久化到 localStorage 以实现会话持久化。- 在 CartContext 中集中添加/删除逻辑以提高可维护性。- 包括明确的反模式和数量管理推荐。- 设计用于购物车、产品列表或相关 UI 的复用。

无害

安装命令

点击复制
官方npx clawhub@latest install cart-management
镜像加速npx clawhub@latest install cart-management --registry https://cn.longxiaskill.com

技能文档

为 React 购物车状态提供模式:防止重复添加、持久化、上下文设计。

防止重复添加

  • 在 CartContext 中跟踪产品 ID(单独状态或从 cartItems 派生)
  • 添加前检查 productIdsInCart.includes(item.id)
  • 在上下文中集中逻辑,不在 ProductCard 或子组件中

localStorage 持久化

  • 挂载时从 localStorage.getItem('cart') 初始化购物车状态
  • 在每次添加/删除后持久化:localStorage.setItem('cart', JSON.stringify(cartItems))
  • 如果使用,同步 productIdsInCart:localStorage.setItem('cart_ids', JSON.stringify(ids))
  • 跨会话防止重复(刷新、新标签页)

CartContext 模式

const addToCart = (item: CartItem) => {
  if (!productIdsInCart.includes(item.id)) {
    setCartItems(prev => [...prev, item]);
    setProductIdsInCart(prev => [...prev, item.id]);
    localStorage.setItem('cart', JSON.stringify([...cartItems, item]));
  }
};

反模式

  • 不要在 ProductCard 挂载的 useEffect 中添加到购物车(导致重复)
  • 不要在多个组件中重复逻辑 — 使用上下文
  • 作为数据完整性的回退,添加后端验证

数量更新

对于同一产品的数量更新:使用 cartItems.map() 更新 item.quantity,不要创建重复条目。

数据来源ClawHub ↗ · 中文优化:龙虾技能库