UI 数组更改时未更新 React
UI is not updating when array changes React
我有这两个函数来更新数组中的元素。
我将举一个例子来使它更清楚:
数组:[['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 没有在更新数组后立即显示更改。它只会在更新其他内容后显示它们。知道发生了什么事吗?谢谢!!
更新数组时,需要用到setRows([...row]);
。 row.splice(trashId,1);
会改变数组的值,但不会改变 row
的引用,因此 React 不会重新渲染组件。
我有这两个函数来更新数组中的元素。 我将举一个例子来使它更清楚: 数组:[['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 没有在更新数组后立即显示更改。它只会在更新其他内容后显示它们。知道发生了什么事吗?谢谢!!
更新数组时,需要用到setRows([...row]);
。 row.splice(trashId,1);
会改变数组的值,但不会改变 row
的引用,因此 React 不会重新渲染组件。