You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
2.8 KiB

7 years ago
---
id: faq-state
title: Component State
permalink: docs/faq-state.html
layout: docs
category: FAQ
---
### What does setState do?
`setState()` schedules an update to a component's `state` object. When state changes, the component responds by re-rendering.
### What is the difference between state and props?
7 years ago
[`props`](/docs/components-and-props.html) (short for "properties") and [`state`](/docs/state-and-lifecycle.html) are both just JavaScript objects that trigger a re-render when changed. While both hold information that influences the output of render, they are different in one important way: `props` get passed to the component (similar to function parameters) whereas `state` is managed within the component (similar to variables declared within a function).
7 years ago
7 years ago
Here are some good resources for further reading on when to use `props` vs `state`:
* [Props vs State](https://github.com/uberVU/react-guide/blob/master/props-vs-state.md)
* [ReactJS: Props vs. State](http://lucybain.com/blog/2016/react-state-vs-pros/)
7 years ago
### Why is `setState` giving me the wrong value?
7 years ago
Calls to `setState` are asynchronous - don't rely on `this.state` to reflect the new value immediately after calling `setState`. Pass an updater function instead of an object if you need compute values based on the current state (see below for details).
Example of code that will not behave as expected:
7 years ago
```jsx
incrementCount() {
// Note: this will *not* work as intended.
this.setState({count: this.state.count + 1});
7 years ago
}
handleSomething() {
// this.state.count is 1, then we do this:
this.incrementCount();
this.incrementCount(); // state wasn't updated yet, so this sets 2 not 3
7 years ago
}
```
See below for how to fix this problem.
### How do I update state with values that depend on the current state?
7 years ago
Pass a function instead of an object to setState to ensure the call always uses the most updated version of state (see below).
### What is the difference between passing an object or a function in setState?
Passing an update function allows you to access the current state value inside the updater. Since `setState` calls are batched, this lets you chain updates and ensure they build on top of each other instead of conflicting:
```jsx
incrementCount() {
7 years ago
this.setState((prevState) => {
return {count: prevState.count + 1}
});
7 years ago
}
handleSomething() {
// this.state.count is 1, then we do this:
this.incrementCount();
this.incrementCount(); // count is now 3
7 years ago
}
```
[Learn more about setState](/docs/react-component.html#setstate)
7 years ago
### Should I use a state management library like Redux or MobX?
[Maybe.](http://redux.js.org/docs/faq/General.html#general-when-to-use)
It's a good idea to get to know React first, before adding in additional libraries. You can build quite complex applications using only React.