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

为什么删除SearchData中的元素时,useEffect没有触发state更新?

问题原因
  • 你在deleteEl删除逻辑中使用了splice方法,该方法是原地修改数组的API,修改后数组的引用地址和原searchData完全一致。
  • React的state更新机制采用浅比较逻辑,当你把引用地址没有变化的数组传给setSearchData时,React会判定state未发生更新,因此依赖searchData的useEffect不会被触发。
  • 新增逻辑可以正常执行的原因是concat方法会返回全新的数组,引用地址发生了变化,React可以正常检测到state更新。
修复方案

修改删除逻辑,先拷贝原数组生成新的引用,在新数组上执行删除操作后再传给setSearchData即可修正问题,同时建议反向遍历数组避免删除元素时出现索引错位:

const deleteEl = (itemKey, value) => {
    // 浅拷贝原数组生成新引用
    const newSearchData = [...searchData];
    // 反向遍历避免splice导致的索引错位漏判
    for (let i = newSearchData.length - 1; i >= 0; i--) {
      // 可选链避免属性为null时的报错
      if (newSearchData[i][itemKey]?.includes(value)) {
        newSearchData.splice(i, 1);
      }
    }
    setSearchData(newSearchData);
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:39:03