如果只是毫無思考的使用api,那么我將變成一個沒有感情的api使用機器人,對技術不會有任何提升,多思考,多總結。
UseMemo
useMemo,允許你通過記住上一個結果的方式在多次渲染的之間緩存計算結果,使得控制具體子節點何時更新變得更容易
useMemo的使用方法
const data = useMemo(() => {}, []);
知道了使用方法,那么我們來分析一下useMemo執行的幾種情況:
1.首次渲染
2.非首次渲染
a.依賴發生改變
b.為空數組時
c. 依賴每發生變化
我們大致可以將情況分為兩種大情況
let hookState = []; let hookIndex = 0; function useMemo(callBack, dependencies) { if (hookState[hookIndex]) { const [oldData, odlDependencies] = hookState[hookIndex]; // 空數組every為true let same = odlDependencies.every((item,index)=>item===odlDependencies[index]) if(same) { hookIndex++ return oldData }else{ const newData = callBack() hookState[hookIndex++] = [newData, dependencies]; } // 非首次渲染 } else { // 首次渲染 const newData = callBack(); hookState[hookIndex++] = [newData, dependencies]; } }