使用React钩子,如果我们需要更新大状态数组的一个元素,直接修改状态然后调用set是一种反模式吗?还是必须先复制一个巨大的数组才能传递给set()?我想避免在每次状态更改时复制大型数组。下面的代码不好吗?
const [bigArray, setBigArray] = useState(Array(SOME_HUGE_NUMBER).fill(false));
bigArray[15] = true;
setBigArray(bigArray);
答案 0 :(得分:3)
您不应直接修改状态,否则可能会导致错误。因此,最佳做法是克隆数组,然后修改该值。
如果您不使用该变量,它将被自动垃圾收集,因此不会影响性能。考虑以下示例:
const bigArrayTmp = [... bigArray] ;
bigArrayTmp[15] = true;
setBigArray(bigArrayTmp);
在此代码之后,如果未使用bigArrayTmp
,则会被垃圾回收。因此,请不要占用您的记忆。
答案 1 :(得分:1)
在React中修改状态之类的常量变量不是一个好习惯。设置之前,请先尝试克隆该数组。
let newArr = [...bigArray]
newArr[15] = true
setBigArray(newArr)