Using State correctly Flashcards
Do not modify state directly
Use setState(). The only place you can assign state is in the constructor.
State updates may be asynchronous
React may batch multiple setState() calls into a single update for performance. Because this.props & this.state may be updated asynchronously, you should not rely on their values for calculating the next state.
For example, this code may fail to update the counter:
// Wrong this.setState({ counter: this.state.counter + this.props.increment, });
To fix it, use a second form of setState() that accepts a function rather than an object. That function will receive the previous state as the first argument, and the props at the time the update is applied as the second argument:
// Correct this.setState((state, props) => ({ counter: state.counter + props.increment }));
State updates are merged
When you call setState(), React merges the object you provide into the current state. For example, your state may contain several independent variables:
constructor(props) { super(props); this.state = { posts: [], comments: [] }; }
Then you can update them independently with separate setState() calls:
componentDidMount() { fetchPosts().then(response => { this.setState({ posts: response.posts }); });
fetchComments().then(response => { this.setState({ comments: response.comments }); }); }
The merging is shallow, so this.setState({comments}) leaves this.state.posts intact, but completely replaces this.state.comments.