当我需要实现某个外部属性变化,更新表格的某一列,所有值均为变化后的值,应该如何实现

在这里,将tableData添加到useEffect的依赖数组会导致无限循环。因为在useEffect内部更新了tableData状态,每次状态改变又会触发useEffect再次执行,形成无限循环。

解决这个问题的一种方法是,在状态更新时创建一个新的数组,而不是直接修改现有数组。这样就不会触发依赖数组中tableData的变更检测。

useEffect(() => {
  // 更新表格数据,将columnToUpdate列的值设置为externalProp
  const updatedTableData = tableData.map(row => ({
    ...row,
    columnToUpdate: externalProp,
  }));

  // 使用 [...tableData] 创建一个新的数组,避免直接修改tableData导致无限循环
  setTableData([...updatedTableData]);
}, [externalProp]); // 不需要将tableData作为依赖项,因为我们并没有直接修改它

// 注意:这种情况下,externalProp变化时,tableData不会立刻更新,而是等到下一次渲染周期才更新

然而,在这个特定场景下,由于我们在每次externalProp变化时都希望更新tableData中所有行的columnToUpdate列,实际上没有必要将tableData作为依赖项。当externalProp变化时,执行更新逻辑是安全且合理的。

posted @ 2024-03-18 23:44  龙陌  阅读(30)  评论(0)    收藏  举报