React概念理解

1 useEffect

文章推荐

  1. https://segmentfault.com/a/1190000018639033
  2. https://juejin.cn/post/7044161793471545381
javascript 复制代码
  useEffect(() => {
    console.log('====111111======');
    return () => {
      console.log('=======222222=======');
    };
  });

在每次代码刷新时候都会打印111111和222222
javascript 复制代码
const [state, dispatch] = useReducer(
    (oldState, payload) => {
      if (payload.type === 'tick') {
        return {
          ...oldState,
          count: oldState.count + oldState.step,
        };
      }

      return {
        ...oldState,
      };
    },
    { count: 0, step: 1, type: '' },
  );
  useEffect(() => {
    console.log('========111111======');
    const id = setInterval(() => {
      console.log('========222222======', state.count);
      dispatch({ type: 'tick' }); 
    }, 1000);
    return () => {
      console.log('========333333======', state.count);
      clearInterval(id);
    };
  }, [dispatch]);

 <h1>{state.count}</h1>

console.log('========111111======'); 只会执行一次,****说明每次返回的dispatch都是同一个函数。

console.log('========222222======', state.count);会被多次执行,但是打印出来的state.count会一直是0 (因为Capture Value的原因)

console.log('========333333======', state.count); 不会执行,页面其他state更新它也不受影响
页面其他state更新不会影响到上面useEffect内部执行。

h1标签里面的值会正常一秒增加一次。


可以把上面理解成一个小型的Redux。
相关推荐
梨子同志5 分钟前
Web Storage:localStorage 与 sessionStorage
前端·javascript
绅士玖5 分钟前
从Promise到async/await:JavaScript异步编程的演进
前端·javascript
总之就是非常可爱5 分钟前
打造一个支持流式输出的 Vue Markdown 渲染组件
前端·chatgpt·markdown
3Katrina7 分钟前
从做一个播放音乐的小组件讲React的事件触发机制
前端·javascript·react.js
前端拿破轮10 分钟前
当我用deepwiki来学习React源码
react.js·源码
悦悦妍妍10 分钟前
Vue3 + Ant Design Vue Modal 对话框可拖拽指令
前端
用户697793063425311 分钟前
多笔记间快速切换自动保存竞态条件问题及解决方案
前端
光影少年12 分钟前
vue2为什么不能检查数组的的变化,改怎样解决
前端·vue.js·vuex
用户527096487449012 分钟前
🚀 打造完美前端工作流:Husky + Commitlint 最佳实践指南
前端
LuckySusu13 分钟前
【HTML篇】HTML 文档声明(Doctype)与模式解析:严格模式 vs 混杂模式
前端·html