Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[React] useLayoutEffect 和 useEffect 有什么区别?【热度: 313】 #591

Open
yanlele opened this issue Oct 4, 2023 · 0 comments
Open
Labels
web框架 web 框架相关知识 腾讯 公司标签
Milestone

Comments

@yanlele
Copy link
Member

yanlele commented Oct 4, 2023

关键词:useLayoutEffect 和 useEffect 区别

useLayoutEffect 和 useEffect 的主要区别在于它们执行的时机。

  • useLayoutEffect:
    useLayoutEffect 是在 DOM 更新完成但在浏览器绘制之前同步执行的钩子函数。它会在 DOM 更新之后立即执行,阻塞浏览器的绘制过程。这使得它更适合于需要立即获取最新 DOM 布局信息的操作,如测量元素尺寸或位置等。使用 useLayoutEffect 可以在更新后同步触发副作用,从而保证 DOM 的一致性。

  • useEffect:
    useEffect 是在组件渲染完毕后异步执行的钩子函数。它会在浏览器完成绘制后延迟执行,不会阻塞浏览器的绘制过程。这使得它更适合于处理副作用操作,如发送网络请求、订阅事件等。使用 useEffect 可以将副作用操作放到组件渲染完成后执行,以避免阻塞浏览器绘制。

总结:

  • useLayoutEffect 是同步执行的钩子函数,在 DOM 更新后立即执行,可能会阻塞浏览器的绘制过程;
  • useEffect 是异步执行的钩子函数,在浏览器完成绘制后延迟执行,不会阻塞浏览器的绘制过程。

通常情况下,应优先使用 useEffect,因为它不会阻塞浏览器的渲染,并且能够满足大多数的副作用操作需求。只有在需要获取最新的 DOM 布局信息并立即触发副作用时,才需要使用 useLayoutEffect。

@yanlele yanlele added web框架 web 框架相关知识 腾讯 公司标签 labels Oct 4, 2023
@yanlele yanlele added this to the milestone Oct 4, 2023
@yanlele yanlele changed the title [React] useLayoutEffect 和 useEffect 有什么区别?【热度: 13】 [React] useLayoutEffect 和 useEffect 有什么区别?【热度: 313】 Oct 4, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
web框架 web 框架相关知识 腾讯 公司标签
Projects
None yet
Development

No branches or pull requests

1 participant