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

基于ID移除数组对象:Filter代码失效,需保留剩余数据提交

问题修复:基于ID移除数组对象并更新状态

问题原因

  1. filter 是纯函数,不会修改原数组,你当前调用后没有保存返回的新数组,等于白执行
  2. 更新状态时的写法错误,{ ...monitoringResult, monitoringResult } 并没有修改任何数据,只是把原对象复制了一遍,还多了一个冗余的monitoringResult属性

修复后的代码

const deleteChartData = (id) => {
  // 拿到过滤后的新数组,处理可选链的空值情况
  const filteredCharts = monitoringResult?.monitoringResults?.opCharts?.filter(col => col.id !== id) || [];
  
  // 逐层更新嵌套状态,保证不可变性
  setMonitoringResult({
    ...monitoringResult,
    monitoringResults: {
      ...monitoringResult.monitoringResults,
      opCharts: filteredCharts
    }
  });
  
  setTimeout(() => {
    formikForm.handleSubmit();
  }, 0);
};

关键说明

  • 必须保存filter返回的新数组,因为原数组不会被修改
  • 更新嵌套对象状态时,要逐层用扩展运算符...拷贝,保证状态的不可变性,这样React才能检测到状态变化并重新渲染
  • 加上|| []处理空值情况,避免filter调用后返回undefined导致状态异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:07:15