面试题——React 中 useEffect 与 useLayoutEffect 区别?

useEffect 与 useLayoutEffect 有什么区别?

在React的源码中,useLayoutEffectuseEffect内部的实现其实是一样的,唯一不同的点在于useLayoutEffect在执行的过程中是先调用React内部的mountLayoutEffect,然后再调用mountEffectImpl,而useEffect执行的时候则是调用的mountEffect,最后再调用的方法也跟useLayoutEffect一样。那么mountLayoutEffectmountEffect又有什么不同呢?唯一的不同点也只是触发的时机不同。

useEffect异步处理副作用,而useLayoutEffect同步处理副作用,

举例

举一个简单的例子,让我们需要修改页面中的DOM元素的颜色或者位置时,在useEffect中修改DOM相关的属性会看到页面有明显的闪动,而在useLayoutEffect中修改DOM相关的属性时,则不会发生闪动,这是为什么呢?其实这就是前面说的执行时机的不同。useEffect能够适用于大部分场景,除了前面的例子中说的修改DOM元素的位置和颜色这样的场景不适用。而useLayoutEffect因为是同步执行的,所以在DOM加载完成后再去进行操作就不会发生闪动,也因为useLayoutEffect是同步执行的,所以我们也要避免在useLayoutEffect执行需要大量计算的内容,如果需要大量计算,就会导致页面的卡顿,从而造成页面的阻塞

最后

useEffect与useLayoutEffect的函数签名是完全一致的,从代码角度来说,虽然它们是两个不同的函数,但是它们的使用方法是完全一致的,甚至一定程度上这两者是可以相互替换的,唯一的不同点是它们两的执行时机,并且官方给出的建议是在大部分场景下我们都可以使用useEffect来完成副作用的执行,只有当useEffect无法解决时再用useLayoutEffect进行处理,这样就不会产生相关的性能问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

admin_zlj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值