[Suggestion]: Runtime Development Warning for Stale Closures in useEffect, useCallback, and useMemo
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Facilidade para iniciantes
- 35/100
- Tipo de issue
- Funcionalidade
- Clareza
- Precisa de esclarecimento
- Status de atividade
- Pouca atividade
- Stack de tecnologia
- eslint, javascript, react
- Domínio
- developer-experience, frontend, tooling
Direção de pesquisa
Comece pelo comportamento descrito para useEffect, useCallback e useMemo e compare-o com a regra exhaustive-deps do eslint-plugin-react-hooks. Defina um escopo concreto para avisos em tempo de execução e casos de aceitação para dependências omitidas, valores dinâmicos e hooks personalizados; a issue estará concluída quando o comportamento dos avisos e a abordagem de validação estiverem especificados.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Summary
Make the waring for Stale Closures in useEffect, useCallback, and useMemo more detailed
Page
No response
Details
React hooks that accept dependency arrays (useEffect, useCallback, useMemo) rely on developers to manually list all reactive values that the hook's closure depends on. When a value is omitted from the dependencies array, the hook's closure continues to reference an outdated value from a previous render—a "stale closure". This leads to subtle, difficult‑to‑debug bugs such as:
Event handlers or effects reading old state/props.
Effects that should run on state changes never re‑executing.
Callbacks that always operate on stale data.
Currently, the eslint-plugin-react-hooks provides a static analysis rule (exhaustive‑deps) that warns about missing dependencies. However, this rule:
Cannot catch all cases (e.g., dynamic values, complex control flow, or custom hooks that obscure dependencies).
Only runs at lint time; developers may ignore or disable the warning.
Does not warn about actual runtime behavior—it cannot tell if a stale closure actually read an outdated value during a particular render.
As a result, developers often spend hours chasing down stale‑closure bugs, especially in larger codebases or when integrating third‑party hooks.
- Linguagem predominante
- JavaScript
- Estrelas
- 11.8k
- Forks
- 7.9k
- Merge médio
- 16h 6min
- PRs com merge (30d)
- 7
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de reactjs/react.dev
-
type: documentation
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 82/100
-
bug: unconfirmed
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
-
type: typos
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 90/100
-
bug: unconfirmed
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
Todas as issues de reactjs/react.dev
Issues semelhantes
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
avniproject/avni-client#2135 ·
-
enhancement
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
babalae/bettergi-scripts-list#3674 ·
-
A-Release-Notes C-Editing D-Modest S-Ready-For-Implementation
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
bevyengine/bevy-website#2595 ·
-
ecosystem wording
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 90/100
matrix-org/matrix.org#3649 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
vadimdemedes/ink#1029 ·