18 Apr 2023
setState
schedules an update to a component’s state
object. When state changes, the component re-renders.setState
are asynchronous for performance reasons.// Assume count starts at 0
incrementCount() {
this.setState({count: this.state.count + 1});
}
handleSomething() {
this.incrementCount();
this.incrementCount();
this.incrementCount();
When react re-renders this component the state will be 1 even though we called it three times.
→ Why? React doesn’t update this.state.count
until the component is re-rendered. incrementCount()
ends up reading count
as 0 three times.
→ Fix: Pass an update function:
incrementCount() {
this.setState((state) => {
// Use state, not this.state cause it's a parameter
return {count: state.count + 1}
});
}
props
get passed to the component (similar to function parameters)state
is managed within the component