Loading

Quipoin Menu

Learn • Practice • Grow

react / setState Method in React
tutorial

setState Method in React

Before React Hooks (version 16.8), class components were the only way to have state. In class components, state is managed using the `this.setState()` method. While functional components with `useState` are now the modern standard, understanding `setState` is important for maintaining legacy code and understanding React's history.

What is setState?

`setState()` is a method available in class components that updates the component's state and tells React that this component and its children need to be re-rendered with the updated state.

In class components, state is always a single object. Unlike `useState` where you can have multiple state variables, class components have one `this.state` object containing all state.

Basic Syntax

class Counter extends React.Component {
  constructor(props) {
    super(props);
    this.state = { count: 0 };
  }

  increment() {
    this.setState({ count: this.state.count + 1 });
  }

  render() {
    return (
      <div>
        <p>Count: {this.state.count}</p>
        <button onClick={this.increment.bind(this)}>Increment</button>
      </div>
    );
  }
}

Important Features of setState

1. setState Merges Objects
When you call `setState`, React merges the object you provide into the current state. You don't need to specify all properties, only the ones that changed.
this.state = { name: 'John', age: 25, isActive: true };
<!-- Only update age, name and isActive remain unchanged -->
this.setState({ age: 26 });

2. setState is Asynchronous
React may batch multiple `setState` calls into a single update for performance. This means you can't rely on the current state immediately after calling `setState`.
increment() {
  this.setState({ count: this.state.count + 1 });
  console.log(this.state.count); <!-- Still shows old value! -->
}

If you need to update state based on previous state, use the function form of `setState`.
this.setState((prevState) => {
  return { count: prevState.count + 1 };
});

Functional setState

When the new state depends on the previous state, it's safer to use the function form. This ensures you're working with the most up-to-date state, especially when multiple updates are batched.
this.setState((prevState) => {
  return { counter: prevState.counter + 1 };
});

setState with Callback

`setState` accepts a second parameter – a callback function that runs after the state has been updated and the component has re-rendered.
this.setState({ count: 10 }, () => {
  console.log('State updated, count is now', this.state.count);
});

Modern Alternative: useState

In modern React development, functional components with `useState` are preferred. They're simpler, require less code, and don't have `this` binding issues.
function Counter() {
  const [count, setCount] = useState(0);
  const increment = () => setCount(count + 1);
  return <button onClick={increment}>{count}</button>;
}

Two Minute Drill

  • `setState()` is the method used in class components to update state.
  • It merges the provided object into the current state (doesn't replace the whole state).
  • `setState` is asynchronous – React may batch multiple updates.
  • Use the function form (`setState((prevState) => newState)`) when new state depends on previous state.
  • A callback can be passed as second parameter to run code after state update.
  • Modern React prefers `useState` hook in functional components over class components and `setState`.

Need more clarification?

Drop us an email at career@quipoinfotech.com