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

关闭单个标签页时所有已打开标签页均被关闭的问题排查求助

问题根因

代码的核心错误是操作对象错误:prevState是包含panes、activeKey两个属性的状态对象,原逻辑直接对整个状态对象做展开、forEach遍历、filter过滤操作,对象本身不支持数组的遍历/过滤方法,导致最终返回的panes为空数组,所有标签页就都被清空了。

修正后的实现代码

remove = targetKey => {
  let { activeKey } = this.state;
  let lastIndex;
  this.setState(prevState => { 
      // 正确从prevState中取出panes数组进行操作
      const originPanes = [...prevState.panes];
      originPanes.forEach((pane, i) => {
          if (pane.key === targetKey) {
            lastIndex = i - 1;
          }
      });
      const newPanes = originPanes.filter(pane => pane.key !== targetKey);
      if (newPanes.length && activeKey === targetKey) {
          if (lastIndex >= 0) {
            activeKey = newPanes[lastIndex].key;
          } else {
            activeKey = newPanes[0].key;
          }
      }
      return ({panes: newPanes, activeKey});
  });  
};

注意事项

  • 操作状态时要明确区分状态根对象和需要修改的数组属性,不要直接对整个状态对象调用数组方法
  • 数组修改时要做浅拷贝,避免直接修改原状态导致的不可预期问题

内容的提问来源于stack exchange,提问作者Thomas Deepak Konreddy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:36:02