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

React中点击子级加号图标匹配tagname并仅显示点击项数据的问题

解决方案

1. 修正过滤逻辑,精准匹配标识

当前仅用id过滤会出现多个数据项匹配的情况,建议结合tagName+id做双重匹配,确保只筛选出点击项对应的唯一数据:

// 点击事件处理函数,传入当前点击的子项数据
const handlePlusClick = (clickedItem) => {
  // 合并两个state数据后,同时匹配tagName和id
  const targetData = [...stateA, ...stateB].filter(
    item => item.tagName === clickedItem.tagName && item.id === clickedItem.id
  );
  // 更新详情展示的state
  setDisplayDetail(targetData);
};

2. 渲染时设置唯一key,避免重复渲染

即使过滤后数据正确,若列表项的key不唯一也会导致重复显示问题,建议用id+tagName组合作为唯一key:

{displayDetail.map(item => (
  <div key={`${item.id}-${item.tagName}`} className="detail-card">
    <h4>{item.tagName}</h4>
    <p>{item.detailContent}</p>
  </div>
))}

3. 对合并后的数据源提前去重

如果两个state本身存在重复的tagName+id组合数据,建议在过滤前先做去重处理:

// 合并并去重两个state的数据
const uniqueCombinedData = [...new Map(
  [...stateA, ...stateB].map(item => [`${item.id}-${item.tagName}`, item])
).values()];

// 再基于去重后的数据做筛选
const targetData = uniqueCombinedData.filter(
  item => item.tagName === clickedItem.tagName && item.id === clickedItem.id
);

4. 从数据源源头排查

检查两个state的初始化或更新逻辑,确认是否存在重复数据被存入的情况,若为接口返回重复数据,建议在数据存入state前先完成去重。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 01:09:55