2 回答
TA贡献1816条经验 获得超4个赞
不,那个代码示例没有违反钩子的规则。每次组件渲染时,都会以完全相同的顺序对 useState 进行相同数量的调用,这样就可以了。
我确实想指出立即在组件主体中设置状态没有多大意义。当组件挂载时,它将使用 state 的初始值开始渲染,但在它完成渲染之前,状态已经改变,它必须重新开始。但据推测,这只是示例的一个工件,在您的实际代码中,if
它将位于 useEffect 或其他一些实际代码位置内。
TA贡献1827条经验 获得超9个赞
React 文档声明:不要在循环、条件或嵌套函数内调用 Hook。
好的,以下代码显示了上述语句的示例。我遇到了同样的问题,我需要在循环内设置状态,如下所示
const [someArray, setArray] = useState([]);
someValue.forEach((value, index) => {
setArray([...someArray, value]) //this should be avoided
});
以上事情我已经实现如下
var temp = [];
var counter = 0;
someValue.forEach((value, index) => {
temp.push(value);
counter++;
if (counter === someValue.length) {
setArray(temp)
}
});
如果您在循环内设置状态,则每次组件重新呈现您不想进入的状态时。
这段代码是否违反了钩子的规则
否 您的代码看起来不错,因为您仅在组件呈现时仅根据条件设置一次状态
添加回答
举报