reactjs / reactjs/react.dev

Docs regarding setState are in direct conflict with one another

Open
#3,692 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
JavaScript
Stars
11.8k
Forks
7.9k
Avg merge
1d 11h
Merged PRs (30d)
11

Description

In Introducting Hooks, and several other places, there is a simple counter example that illustrates how to use the useState hook.

function Example() {
  // Declare a new state variable, which we'll call "count"
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}

However, there happens to be another counter example in the Hooks API Reference for useState.

function Counter({initialCount}) {
  const [count, setCount] = useState(initialCount);
  return (
    <>
      Count: {count}
      <button onClick={() => setCount(initialCount)}>Reset</button>
      <button onClick={() => setCount(prevCount => prevCount - 1)}>-</button>
      <button onClick={() => setCount(prevCount => prevCount + 1)}>+</button>
    </>
  );
}

In this second example, a callback is being passed into the setState function, and the code is accompanied by the following language...

The ”+” and ”-” buttons use the functional form, because the updated value is based on the previous value.

This would imply that the first example (which is in a very prominent location in the docs by the way), is actually incorrect and is encouraging an anti-pattern.

I hope you can see how these two examples are in direct conflict with one another and might be causing confusion in the community!

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Read the counter examples in Introducing Hooks and the Hooks API Reference, especially the functional-updates section, and compare the guidance around setState. Resolve the inconsistency so the documentation gives one clear explanation of when each form is appropriate, then verify that the linked examples and surrounding text no longer conflict.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, react
Domain
documentation
Issue type
Documentation
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.