Analysis of asynchronous issues of react's setSate

不言
Release: 2019-03-23 09:55:54
forward
1972 people have browsed it

This article brings you an analysis of the asynchronous problem of react's setSate. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.

When we read the documentation, most of them say that react's setState is asynchronous, but is it really asynchronous? If so, then we can also guess: Can it be synchronized? So when does it need to be asynchronous and when does it need to be synchronized?

Let’s first take a look at react’s official description of setSate:

Consider setState() as a request rather than a command to immediately execute the update component. For better performance, React might defer it and update these components all at once later. React does not guarantee that the changed results will be available immediately after setState.

A very classic example:

// 初始state.count 当前为 0 componentDidMount(){ this.setState({count: state.count + 1}); console.log(this.state.count) }
Copy after login

If you are familiar with react, you must know that the final output result is 0, not 1.

Let’s look at another example

class Demo extends Component { constructor(props) { super(props); this.state = { number: 0 }; } render() { return ; } componentDidMount() { //手动绑定mousedown事件 this.refs.button.addEventListener( "mousedown", this.onClick.bind(this) ); //setTimeOut setTimeout(this.onClick.bind(this), 1000); } onClick(event) { if (event) { console.log(event.type); } else { console.log("timeout"); } console.log("prev state:", this.state.number); this.setState({ number: this.state.number + 1 }); console.log("next state:", this.state.number); } } export {Demo};
Copy after login

Use 3 methods to update state in this component

1.在p节点中绑定onClick事件 2.在componentDidMount中手动绑定mousedown事件 3.在componentDidMount中使用setTimeout调用onClick
Copy after login

After clicking the component, can you guess the result? The output result is:

timeout prev state: 0 next state: 1 mousedown prev state: 1 next state: 2 click prev state: 2 next state: 2
Copy after login

The result seems a bit unexpected. Among the three methods, only the onClick event bound on p outputs the result that can prove that setState is asynchronous. The other two methods show that setState seems to be synchronous.

Summary:
1. In the component life cycle or react event binding, setState is updated asynchronously.
2. Calling setState in a delayed callback or native event-bound callback is not necessarily asynchronous.

This result does not mean that the statement that setState is executed asynchronously is wrong. A more accurate statement is that setState cannot guarantee synchronous execution.

This article has ended here. For more other exciting content, you can pay attention to theJavaScript Video Tutorialcolumn on the PHP Chinese website!

The above is the detailed content of Analysis of asynchronous issues of react's setSate. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:segmentfault.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!