REACT useEffect的使用和原理

原文:https://overreacted.io/zh-hans/a-complete-guide-to-useeffect/
Dan Abramov

const [count,setCount] = useState(0);
 useEffect(() => {
    setTimeout(() => {
		console.log('计数器的值'+count);
    }, 3000);
  });
return(
<>
  <button onClick={() => setCount(count + 1)}>
        点击次数{count}
      </button>
</>
)

理论上来说 count的值只是属于自己要渲染的那次的值:
原文翻译:**为了确保我们已经有了扎实的理解,我们再回顾一下第一次的渲染过程:

React: 给我状态为 0时候的UI。
你的组件:
给你需要渲染的内容:

You clicked 0 times


记得在渲染完了之后调用这个effect: () => { document.title = ‘You clicked 0 times’ }。
React: 没问题。开始更新UI,喂浏览器,我要给DOM添加一些东西。
浏览器: 酷,我已经把它绘制到屏幕上了。
React: 好的, 我现在开始运行给我的effect

运行 () => { document.title = ‘You clicked 0 times’ }。
现在我们回顾一下我们点击之后发生了什么:

你的组件: 喂 React, 把我的状态设置为1。
React: 给我状态为 1时候的UI。
你的组件:

给你需要渲染的内容:

You clicked 1 times


记得在渲染完了之后调用这个effect: () => { document.title = ‘You clicked 1 times’ }。
React: 没问题。开始更新UI,喂浏览器,我修改了DOM。
Browser: 酷,我已经将更改绘制到屏幕上了。
React: 好的, 我现在开始运行属于这次渲染的effect

运行 () => { document.title = ‘You clicked 1 times’ }。**
总结:每一个组件内的函数(包括事件处理函数,effects,定时器或者API调用等等)会捕获某次渲染中定义的props和state。
在useEffect中

useEffect(()=>{
  //执行语句
},[‘被监视参数’])

被监视参数可以是对象的属性 只针对当前被监视属性

const [data, setData] = useState({data:'测试属性',test:'监测测试'});
  useEffect(() => {
    console.log(data,'data');
  }, [data.test])

改变data.data不会执行console.log
对useEffect有了更深的理解
如果一个函数没有使用组件内的任何值,你应该把它提到组件外面去定义,然后就可以自由地在effects中使用
或者, 你也可以把它包装成 useCallback Hook
核心就是 数据流 同步思想
写项目了 么时间了 回头再看吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值