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

电商Web应用点击“立即购物”触发TypeError问题求助

解决产品详情页TypeError及购物车跳转问题

问题根源

你碰到的TypeError: Cannot destructure property 'image' of 'product' as it is null,是因为getStaticProps返回的product为null,组件渲染时直接解构null的属性触发报错。这个错误会导致页面无法生成,自然无法执行“立即购物”按钮的逻辑。

分步解决

1. 组件层面增加防御性判断

在pages\product[slug].js里,先判断product是否存在再解构,避免直接抛出错误:

// 替换原解构代码
if (!product) {
  return <div>产品不存在或已下架</div>;
}
const { image, name, details, price } = product;
// 后续代码保持不变

如果需要更流畅的用户体验,也可以添加加载状态提示。

2. 优化getStaticProps的查询逻辑

原查询用字符串拼接slug存在安全风险且易出现匹配误差,改成参数化查询,并处理产品不存在的情况:

export const getStaticProps = async ({ params: { slug } }) => {
  // 使用参数化查询替代字符串拼接
  const query = `*[_type == "product" && slug.current == $slug][0]`;
  const productsQuery = '*[_type == "product"]';

  // 传入参数slug执行查询
  const product = await client.fetch(query, { slug });
  const products = await client.fetch(productsQuery);

  // 若未找到对应产品,返回notFound触发404页面
  if (!product) {
    return {
      notFound: true,
    };
  }

  return {
    props: { products, product },
  };
};

这样能确保查询准确性,同时避免将null传递给组件。

3. 修复“立即购物”按钮逻辑

页面正常渲染后,检查handleBuyNow的实现,确保调用逻辑正确:

const handleBuyNow = () => {
  // 先将商品加入购物车
  onAdd(product, qty);
  // 再触发购物车显示
  setShowCart(true);
};

同时确认useStateContext导出的onAdd和setShowCart功能正常——比如onAdd是否正确更新购物车数据,setShowCart是否能控制购物车的显示状态。

验证流程

  1. 重启开发服务器,确认产品详情页可正常加载
  2. 访问不存在的产品slug,检查是否返回404页面
  3. 点击“立即购物”按钮,验证购物车是否正常弹出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:30:09