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

React Context数据更新后组件未重新渲染问题求助

问题解决:Context数据更新但组件未重新渲染

核心问题出在状态更新后的数组结构不一致,导致渲染逻辑失效,并非状态突变:

1. 修正过滤后的状态赋值逻辑

你在handle函数中,把filter返回的数组又嵌套了一层[cari],使得side.data从初始的一维产品数组变成了二维数组。Home组件里的side.data.map遍历的是外层数组,每个元素是完整的产品数组而非单个产品对象,自然无法正确渲染。

修改handle函数:

const handle = (tags) => {
  // 简化filter判断逻辑
  const cari = product.filter(item => tags === item.tags);

  setSide(prev => ({
    ...prev,
    data: cari // 直接赋值filter返回的数组,无需再嵌套
  }));
};

2. 修复不稳定的key值

Navbar中按钮使用crypto.randomUUID()作为key,会导致每次渲染都生成新key,触发组件频繁卸载重建,改用标签本身作为key更稳定:

{navv.map((item) => {
  return (
    <button
      className="text-black"
      key={item} // 用唯一的标签文本作为key
      onClick={() => handle(item)}
    >
      {item}
    </button>
  );
})}

3. 确认数据匹配与渲染逻辑

  • 检查product数组的tags字段和导航标签的大小写、拼写完全一致(比如导航是"Camera",产品tags不能是"camera")
  • Home组件中可简化渲染判断,初始state里data已是空数组,无需额外判断side.data &&:
<Wrapbox>
  {side.data.map((item) => {
    return <BoxList key={item.id} data={item} />;
  })}
</Wrapbox>

问题原因说明

之前控制台显示Context数据更新是事实,但更新后的side.data是二维数组,渲染时遍历的是外层数组的子数组,而非单个产品对象,导致BoxList组件无法接收到预期的props,最终表现为“组件未重新渲染”。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:32:10