ESLint rule for detecting function calls inside useState (for recommending lazy initialization) #26822
+205
−1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Adds a new ESLint rule to detect function calls inside useState and recommends that an initializer function be used instead. For example, this code:
const [value, setValue] = useState(generateTodos());
Would trigger the rule into recommending this instead:
const [value, setValue] = useState(() => generateTodos());
More info: React docs on avoiding recreating initial state
How did you test this change?
I added a test file with various tests. The test file passes when I run "yarn test".
As an aside, initially I submitted this to eslint-plugin-react, but they felt this would be a better place for it.
Closes #26520