掌握hook原理之如何手写useMemo

如果只是毫无思考的使用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];
      }
   }

posted @ 2020-11-02 18:40  文学少女  阅读(1169)  评论(0编辑  收藏  举报