亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 if 語句中調用 useState hook 的 setter 是否意味

在 if 語句中調用 useState hook 的 setter 是否意味

慕容森 2021-12-12 15:51:23
React 文檔聲明: 不要在循環、條件或嵌套函數內調用 Hook。調用鉤子是否意味著只是調用useStateeg const [state, useState] = useState(0)?在條件中調用 setter 怎么樣?這段代碼是否違反了鉤子規則?const [oneHook, setOneHook] = useState(0)const [anotherHook, setAnotherHook] = useState(false)if (something) {   setOneHook(1)   setAnotherHook(true)} else {     setOneHook(0);     setAnotherHook(false)}謝謝 !
查看完整描述

2 回答

?
繁華開滿天機

TA貢獻1816條經驗 獲得超4個贊

不,那個代碼示例沒有違反鉤子的規則。每次組件渲染時,都會以完全相同的順序對 useState 進行相同數量的調用,這樣就可以了。

我確實想指出立即在組件主體中設置狀態沒有多大意義。當組件掛載時,它將使用 state 的初始值開始渲染,但在它完成渲染之前,狀態已經改變,它必須重新開始。但據推測,這只是示例的一個工件,在您的實際代碼中,if它將位于 useEffect 或其他一些實際代碼位置內。


查看完整回答
反對 回復 2021-12-12
?
素胚勾勒不出你

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)

       }

    });

如果您在循環內設置狀態,則每次組件重新呈現您不想進入的狀態時。


這段代碼是否違反了鉤子的規則


否 您的代碼看起來不錯,因為您僅在組件呈現時僅根據條件設置一次狀態


查看完整回答
反對 回復 2021-12-12
  • 2 回答
  • 0 關注
  • 273 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號