You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React useState传递state作为prop报错 Commerce.js电商项目Cart组件渲染错误

问题引发原因

  1. App.js中购物车状态的初始值类型错误:你为cart设置的初始值是空数组[],但Commerce.js的commerce.cart.retrieve()接口返回的购物车数据是对象结构,类型不匹配会导致首次渲染时组件读取属性出现异常。
  2. 价格对象直接被作为React子元素渲染:Commerce.js返回的所有价格相关字段(包含商品单价、购物车小计等)都是固定包含raw/formatted/formatted_with_symbol/formatted_with_code四个属性的对象,不能直接将整个对象放在JSX中渲染,必须指定要渲染的具体属性。你大概率是在未贴出的CartItem组件代码中直接写了类似{item.price}的代码触发了报错。

解决方法

  1. 修正App.js中的cart初始值,匹配接口返回的对象类型:
// 错误写法
const [cart, setCart] = useState([]);
// 正确写法
const [cart, setCart] = useState({});
  1. 检查并修正CartItem组件中的价格渲染逻辑,所有价格字段都要取对应属性渲染:
// 错误写法,直接渲染整个价格对象
<Typography variant="h6">{item.price}</Typography>
// 正确写法,取带货币符号的格式化金额渲染
<Typography variant="h6">{item.price.formatted_with_symbol}</Typography>
  1. 可选优化:给Cart组件的属性判断增加可选链兜底,避免初始加载时的属性读取报错:
// 修改加载判断
if (!cartItems?.line_items) return <Typography variant="h4">Loading...</Typography>;

// 修改空购物车判断
{!cartItems?.line_items?.length ? <EmptyCart /> : <FilledCart />}

内容的提问来源于stack exchange,提问作者Muhammad Abbas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 18:09:01