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

ReactJS筛选后ProjectCards无法正确重新渲染问题求助

问题修复方案

核心问题:列表渲染的Key值错误

React列表渲染依赖唯一key识别组件身份,你的代码里两处key设置均存在错误,导致组件复用逻辑混乱,引发筛选后渲染异常。

1. 修复ServicesCard的Key

原代码中key={servicesList.title}错误,servicesList是数组,不存在title属性,导致所有卡片的key均为undefined,React无法区分不同卡片。
修改为:

{servicesList.map((service, index) => (
  <ServicesCard key={service.title || index} index={index} {...service} onSelect={setSearch} />
))}

优先用service.title作为唯一key(确保每个服务的title唯一),无唯一标识时再用index。

2. 修复ProjectCard的Key和index属性

原代码中key={project.index}错误(projects数组对象无index字段),且index={project}把整个项目对象传给了index属性,完全不符合预期。
修改为:

{filterProjects.map((project, index) => (
  <ProjectCard key={project.name || index} index={index} {...project} />
))}

用project.name作为唯一key(项目名唯一的话),或用index,同时将循环的index正确传给组件的index属性。

次要问题:筛选逻辑严谨性优化

当search为"all"时,原代码返回project.categories,依赖字段的真值判断,逻辑不严谨,应直接返回true保留所有项目:

const filterProjects = projects.filter((project) => {
  if (search === "all") {
    return true;
  }
  return project.categories === search;
});

变量名一致性修正

原代码中定义的是filterProjects,但渲染时写了filteredProjects,若实际代码如此会导致报错,需保持变量名完全一致。

修改后,React能正确识别列表项身份,切换服务卡片时ProjectCard会正常刷新,筛选后的项目数量即可恢复正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:33:23