Você quer solicitar um recurso ou relatar um bug ?
Pergunta de design de API sobre useEffect
Qual é o comportamento atual?
Atualmente useEffect
roda em todas as renderizações. Esse comportamento padrão pode ser perigoso em situações como lidar com solicitações HTTP, quando você se esquece de passar o segundo argumento. Este parece ser um erro comum, especialmente para novatos como eu. Não consigo pensar em muitos (quaisquer) padrões onde você deseja executar useEffect
em cada renderização. Qual foi o raciocínio por trás de não deixar de ser executado uma vez?
Pelo design da API:
useEffect(
() => {
// do something
},
[/* dependency list */]
);
useEffect
será executado apenas quando a lista de dependências mudar, e o array vazio []
significa que não há dependência (ou seja, será executado apenas uma vez). Parece lógico para mim que a lista de dependências indefinidas significa executar a função envolvida por useEffect
cada renderização.
Não consigo pensar em muitos (quaisquer) padrões onde você deseja executar
useEffect
em cada renderização. Qual foi o raciocínio por trás de não deixar de ser executado uma vez?
Suponha que você seja muito novo no React e queira fazer algo sempre que uma variável useState
muda (por exemplo, POSTAR o novo valor em um servidor).
useEffect
.Acho que a lista de dependências pretende ser mais uma otimização de desempenho / auxílio à simplificação de código.
A API atual permite que você decida entre os seguintes comportamentos:
componentDidMount
+ componentDidUpdate
.componentDidMount
.this.props
e prevProps
na API do componente de classe.O comportamento "padrão" que você descreve (quando você não especifica explicitamente as dependências) geralmente é o mais seguro, pois evita que valores obsoletos sejam usados em encerramentos .
No futuro, esperamos fornecer algum tipo de compilador para ajudar a automatizar muito disso. Enquanto isso, fornecemos um plug-in ESLint oficial para ajudar a torná-lo um pouco mais fácil. 😄