用大数组反应useState()钩子

时间:2020-07-04 05:51:59

标签: reactjs react-hooks use-state

使用React钩子,如果我们需要更新大状态数组的一个元素,直接修改状态然后调用set是一种反模式吗?还是必须先复制一个巨大的数组才能传递给set()?我想避免在每次状态更改时复制大型数组。下面的代码不好吗?

const [bigArray, setBigArray] = useState(Array(SOME_HUGE_NUMBER).fill(false));

bigArray[15] = true;
setBigArray(bigArray);

2 个答案:

答案 0 :(得分:3)

您不应直接修改状态,否则可能会导致错误。因此,最佳做法是克隆数组,然后修改该值。

如果您不使用该变量,它将被自动垃圾收集,因此不会影响性能。考虑以下示例:

const bigArrayTmp = [... bigArray] ; 
bigArrayTmp[15] = true; 
setBigArray(bigArrayTmp); 

在此代码之后,如果未使用bigArrayTmp,则会被垃圾回收。因此,请不要占用您的记忆。

答案 1 :(得分:1)

在React中修改状态之类的常量变量不是一个好习惯。设置之前,请先尝试克隆该数组。

let newArr = [...bigArray]
newArr[15] = true
setBigArray(newArr)