使用 React 的 Context API 時,處理元件嘗試存取 Provider 外部上下文的情況非常重要。如果不這樣做,可能會導致意想不到的結果或難以追蹤的錯誤。
問題
當您使用 createContext() 建立上下文時,您可以選擇傳遞預設值。如果元件嘗試存取提供者外部的上下文,則傳回此預設值。
如果不向 createContext() 傳遞預設值,存取 Provider 外部的上下文將傳回 undefined。
如果您確實傳遞了預設值(例如 null 或任何其他值),則當在提供者外部存取上下文時,將傳回該值。
例如:
const PostContext = React.createContext(null); // Default value is null
在這種情況下,如果元件嘗試存取 PostContext 而不包裝在 Provider 中,它將傳回 null。
修復:具有錯誤處理功能的自訂掛鉤
為了避免在其提供者之外存取上下文的情況,我們可以建立一個自訂鉤子,如果上下文存取不正確,該鉤子會拋出錯誤。這對於在開發早期發現錯誤很有用。
function usePosts() { const context = useContext(PostContext); if (context === null) { // checking for "null" because that's the default value passed in createContext throw new Error("usePosts must be used within a PostProvider"); } return context; }
為什麼這很重要
如果沒有錯誤處理,存取其 Provider 以外的上下文可能會傳回 null、未定義或您使用的任何預設值。這可能會導致您的應用程式出現難以偵錯的問題。透過拋出錯誤,可以更容易及早發現並解決問題。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3