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
相关产品推荐
相关产品推荐

