我是 React 新手,正在閱讀 React 導航的檔案
在本節中
const authContext = React.useMemo(
() => ({
signIn: async (data) => {
dispatch({ type: 'SIGN_IN', token: 'dummy-auth-token' });
},
signOut: () => dispatch({ type: 'SIGN_OUT' }),
signUp: async (data) => {
dispatch({ type: 'SIGN_IN', token: 'dummy-auth-token' });
},
}),
[]
);
我不明白使用 useMemo 的目的,因為我們可以使用 UseEffect 做同樣的事情
在這種情況下,有什么理由使用 UseMemo 而不是 useEffect 嗎?
uj5u.com熱心網友回復:
useEffect 的回傳值為 void。并且 useMemo 的回傳值不是 void 而是 memoized 值。如果依賴值發生變化,它將再次計算。在您的情況下,如果使用 useEffect
const authContext = React.useEffect(
() => (
setAuthContext({
signIn: async (data) => {
dispatch({ type: 'SIGN_IN', token: 'dummy-auth-token' });
},
signOut: () => dispatch({ type: 'SIGN_OUT' }),
signUp: async (data) => {
dispatch({ type: 'SIGN_IN', token: 'dummy-auth-token' });
},
})),[]);
這里需要一個額外的狀態/變數(setAuthContext)來獲取物件。(也會導致狀態更新時重新渲染)
uj5u.com熱心網友回復:
UseMemo 用于計算特定值并將該值保存在記憶體中,直到依賴項陣列中的一個依賴項發生更改。例如,您有一些資料集必須根據其他值進行一些操作,它將保存結果,直到其中一個或多個值發生更改。這本質上已經變成了一個普通的值,比如陣列、字串、數字……
UseEffect 是運行每次重新渲染并檢查依賴陣列的東西。如果依賴陣列中的任何值發生更改,則 useEffect 中的代碼將運行。UseEffect 不保存任何結果,通常用于獲取異步資料并在 useState 中設定某些狀態。在此之后,您可以讓另一個 useEffect 在看到狀態已更新并且您的應用程式可以繼續執行時執行一些代碼。
最后還有 useCallback ,它與 useMemo 類似,但通常用于記憶函式。這會將函式存盤在記憶體中,并在本質上使其成為靜態函式,直到依賴陣列中的任何內容發生更改。
使用 useMemo、useCallback 或任何其他 memoization 時要記住的重要一點是,您正在用執行時間換取記憶體,因此取決于您的代碼運行的設備,尤其是它有多少處理能力/RAM,您必須考慮哪些功能最能受益于使用這些功能。
我絕對建議只嘗試這些東西,也許閱讀/觀看有關該主題的更多視覺解釋,因為我也花了一些時間來弄清楚何時使用什么。
我希望這有幫助!
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/531167.html
標籤:反应反应式
