4 回答
TA贡献1812条经验 获得超5个赞
发生这种情况是因为页面打开时购物车内容不会立即从电子商务 API 加载,然后由于错误而卡住了。
你可以先检查是否有购物车内容,然后删除 isEmpty 变量,然后在 javascript 闭包中编写,在几秒钟后的视频中解释,但经过一天的挣扎,我也意识到了:D
if(!cart.line_items)
return '...loading';
return (
<div className={classes.toolbar}>
<Typography className={classes.title} variant="h3"> Your Shopping Cart
</Typography>
{!cart.line_items.length ? <EmptyCart /> : <FilledCart />}
</div>
)
TA贡献1816条经验 获得超4个赞
尝试 const isEmpty = Object.keys(cart).length && !cart.line_items.length;
未从服务器接收数据,但组件已呈现,这就是为什么卡一开始是未定义的。
TA贡献1859条经验 获得超6个赞
尝试使用可选链:
const isEmpty = !cart.line_items?.length
仅当数组存在时才会询问数组长度,从而防止出现未定义的错误。这意味着它将返回 false ifcart.line_items == undefined
或 if cart.line_items.length == 0
。
也许我参加聚会有点晚了,但我陷入了同一个部分,这解决了我的问题(而且我认为它看起来很整洁)
TA贡献1840条经验 获得超5个赞
问题 初始渲染上没有 cart.line_items,因为初始状态是空对象 ({})。
const [cart, setCart] = useState({});
解决方案 为初始渲染提供有效的初始状态,以便有一个真实的、已定义的 cart.line_items 对象,其中具有 length 属性,即!cart.line_items.length; 可以解析为一个值并且不会抛出错误。
const [cart, setCart] = useState({ line_items: [] });
添加回答
举报