【问题标题】:UI is not updating when array changes React数组更改时 UI 不更新 React
【发布时间】:2021-05-31 03:58:36
【问题描述】:

我有这两个函数来更新数组中的元素。 我将举一个例子使其更清楚: 数组:[['M',1],['S',2],['L',4]]

第一个功能: 当我向这个数组添加一对时,它会检查第一个索引是否已经存在,如果存在,它会更新第二个索引。假设我尝试添加 ['M',3],那么数组应该更新为:[['M',4],['S',2],['L',4]]

 const addRow = () => {
      console.log(rows);
      let unique = true;
      rows.forEach((item)=>{  
        if(item[0] == size){
          item[1] = parseInt(item[1]) + parseInt(qty);
          unique = false;
          return;
        }
      })
      if(unique){
        setRows([...rows, [size, qty,rows.length]]);
      }
    };

第二个功能:从数组中的给定索引中删除。

 const removeRow = (trashId) => {
      row = rows;
      row.splice(trashId,1);
      setRows(row);
    };

因此,这两个功能完美运行。问题是,UI 不会在更新数组后立即显示更改。它只会在更新其他内容后显示它们。知道发生了什么吗?谢谢!!

【问题讨论】:

    标签: reactjs use-state


    【解决方案1】:

    更新数组时,需要使用setRows([...row]);row.splice(trashId,1); 会改变数组的值,但不会改变 row 的引用,因此 React 不会重新渲染组件。

    【讨论】:

    • 太棒了!那行得通,谢谢!我对第一个功能也有同样的问题。因为我直接改变它我不知道如何让它工作
    • 我认为它应该在第一个函数中重新渲染,也许你应该检查unique变量的值。
    猜你喜欢
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多