javascript - React hook useEffect() under the hood. Does an effect scheduled with useEffect block the main thread? - Stack Overf

In React DOCs, about the useEffect() hook, we get that:"Effects scheduled with useEffect don’t bl

In React DOCs, about the useEffect() hook, we get that:

"Effects scheduled with useEffect don’t block the browser from updating the screen."

Tip

Unlike ponentDidMount or ponentDidUpdate, effects scheduled with useEffect don’t block the browser from updating the screen.

What does it mean by that exactly?

Example: Imagine that I have the following:

  • A controlled input
  • And a useEffect after 1st render that does some expensive synchronous putation.
function App() {
  const [inputValue,setInputValue] = React.useState('');

  useEffect(()=>{
    // RUN SOME EXPENSIVE SYNCHRONOUS FUNCTION
  },[]);

  return (
    <input value={inputValue} onChange={()=>setInputValue(event.target.value)}/>
  );

}

Does it mean that I would be perfectly able to use my input (which is controlled by React using JS, which is single-threaded) even when that heavy synchronous putation is running? If so, how can this be?

In React DOCs, about the useEffect() hook, we get that:

"Effects scheduled with useEffect don’t block the browser from updating the screen."

Tip

Unlike ponentDidMount or ponentDidUpdate, effects scheduled with useEffect don’t block the browser from updating the screen.

What does it mean by that exactly?

Example: Imagine that I have the following:

  • A controlled input
  • And a useEffect after 1st render that does some expensive synchronous putation.
function App() {
  const [inputValue,setInputValue] = React.useState('');

  useEffect(()=>{
    // RUN SOME EXPENSIVE SYNCHRONOUS FUNCTION
  },[]);

  return (
    <input value={inputValue} onChange={()=>setInputValue(event.target.value)}/>
  );

}

Does it mean that I would be perfectly able to use my input (which is controlled by React using JS, which is single-threaded) even when that heavy synchronous putation is running? If so, how can this be?

Share Improve this question edited Jun 20, 2020 at 9:12 CommunityBot 11 silver badge asked Jul 10, 2019 at 10:05 cbdevelopercbdeveloper 31.6k45 gold badges202 silver badges397 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 7

Class Component

  1. Render the virtual dom.
  2. ponentDidMount.
  3. Paint to the browser.

Functional Component

  1. Render the virtual dom.
  2. useLayoutEffect.
  3. Paint to the browser.
  4. useEffect.

If your side effect is asynchronous, there is no difference between ponentDidMount and useEffect. (almost)
But if it is synchronous, ponentDidMount and useLayoutEffect cause a visual lag.

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745155749a4614110.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信