當鉤子的數量發生變化或鉤子被呼叫的順序發生變化時,React 會觸發各種錯誤。React在這里記錄了這些限制/規則,還記錄了修復各種錯誤的方法。
我知道這些規則是存在的,但它們為什么存在呢?上面的頁面狀態
React 依賴于 Hooks 的呼叫順序
但是為什么 React 團隊決定依賴看似類似陣列的結構而不是鍵控物件來訪問鉤子呼叫呢?似乎沒有任何 React 檔案詳細說明這是否是一個設計決定,或者它是否是掛鉤必須“在引擎蓋下”作業的方式所固有的。
uj5u.com熱心網友回復:
我相信解釋就在這里: https ://reactjs.org/docs/hooks-rules.html#explanation
從檔案詳細資訊:
React 依賴于 Hooks 的呼叫順序
如果我們想有條件地運行一個效果,我們可以把這個條件放在我們的 Hook 中
這樣每個組件都可以始終如一地保持其狀態。如果未正確維護狀態,它可以避免呼叫未定義的鉤子或效果變數以及重新渲染整個組件等錯誤。
uj5u.com熱心網友回復:
由于我們可以在單個組件中使用多個鉤子,因此 React 需要一種穩定的方式以正確的順序正確呼叫它們。這樣想:你的組件以 a 開頭useState(),其中包含將在重新渲染中使用的資料。如果你移除鉤子,React 會做什么?資料應該去哪里?國家應該去哪里?React 不是為這樣的用例而設計的。
然而,它是如何作業的,取決于呼叫 Hooks 的順序。你注意到鉤子只是函式,沒有任何順序引數嗎?React 知道呼叫它們的順序的方法是跟蹤你撰寫它們的順序。移除一個鉤子會破壞這個順序并產生不一致和錯誤。
在您鏈接的頁面上,有一個解釋部分,它通過一個很好的例子進一步回答了您的問題。
uj5u.com熱心網友回復:
是的,順序很重要。
我只能猜測他們為什么選擇這樣做。
您的組件實際上只是一個功能。掛鉤是在您的組件(函式)之外定義的,因此當呼叫掛鉤(例如 a useState)時,它們需要一種方法來識別正在呼叫哪個掛鉤,以便它們setState每次都可以回傳相同的值。
他們本可以在呼叫中添加識別符號,但將唯一識別符號傳遞給此呼叫將是您的責任。更重要的是 id 在整個視圖樹中必須是唯一的。這意味著您應該定義一種在整個應用程式中擁有唯一 ID 的方法。
使用順序可以解決這個問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/440205.html
標籤:javascript 反应 钩
下一篇:如何將新物件作為值放入陣列中?
