zoukankan      html  css  js  c++  java
  • useEffect源码

    其实useReducer和useState有点相似,useState之前介绍过是useReducer的语法糖。

    我们看两个code 

    useEffect(() => {
      console.log(a)
          timerID.current = setInterval(()=>{
              setCount(count => count + 1);
          }, 1000); 
        }, []);
        
        useEffect(()=>{
      console.log(b)
            if(count > 10){
                clearInterval(timerID.current);
            }
        });
    a会打印一次,而b会一直打印  原因就是第一个useEffect中第二个参数是个数组 
    function useEffect(callback,dependencies){
      if(hookStates[hookIndex]){//说明不是第一次,
        let lastDependencies = hookStates[hookIndex];
        let same = dependencies.every((item,index)=>item === lastDependencies[index]);
        if(same){
          hookIndex++;
        }else{
          hookStates[hookIndex++]= dependencies;
          callback();
        }
      }else{//说明是第一次渲染
        hookStates[hookIndex++]= dependencies;
        callback();
      }
    }
    缓存下来比较每一项是否相等,same为true,因此只会打印一次a,
     
    近些天因为项目中用了很多useState所以我也看了看useReducer,发现原来自己写了那么多useState,看着就烦所以我打算重新理解下useReducer,翻了下useReducer源码终于明白了
    最新的理解 2020  /  12  /  5
    当我们大量使用useState时,我们其实可以用useReducer去替代 ,useReducer有两个参数,如果第一个是个纯函数,也就是我们常常说的通过状态去区分进行哪种操作。
    如果第一个参数穿了null的话,那我们的useReducer就完全和useState是一样的了,该写什么写什么 。所以useState是一个简化的useReucer版本
    贴下代码如下:
     
  • 相关阅读:
    「字符串算法」第4章 字典树课堂过关
    「字符串算法」第3章 KMP 算法课堂过关
    「字符串算法」第2章 Hash 和 Hash 表课堂过关
    「基础算法」第5章 广度搜索课堂过关
    「基础算法」第3章 二分算法课堂过关
    「基础算法」第1章 递推算法强化训练
    「基础算法」第1章 递推算法课堂过关
    YbtOJ:冲刺 NOIP2020 模拟赛 Day10
    【模板】轻重链剖分
    LINUX-磁盘空间
  • 原文地址:https://www.cnblogs.com/MDGE/p/13854251.html
Copyright © 2011-2022 走看看