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)
}
});
如果您在循環內設置狀態,則每次組件重新呈現您不想進入的狀態時。
這段代碼是否違反了鉤子的規則
否 您的代碼看起來不錯,因為您僅在組件呈現時僅根據條件設置一次狀態
添加回答
舉報
