Execute tarefas assíncronas com useEffect de forma limpa e segura
De chamar uma API para definir um atraso de tempo limite, tenho certeza que você já questionou como fazer isso corretamente ao usar o gancho React useEffect. Se isso ainda soa confuso, então este artigo é para você. Se não, você pode pelo menos aprender uma abordagem diferente para fazer o trabalho ou se sentir mais confiante ao fazê-lo.
Vou apresentar 3 formas de o fazer de forma segura e arrumada. Mas primeiro, quero mostrar o que você NÃO deve fazer.
Não faça a tarefa assíncrona diretamente no useEffect, em vez disso, SEMPRE envolva sua tarefa assíncrona em uma função e chame-a apenas do useEffect.
Aqui está um exemplo do que você NÃO deve fazer:
useEffect(async () => {
await getData();
},[]);
Além disso, fazer o que este exemplo BAD mostrou levaria a um erro React:
Os retornos de chamada de efeito são síncronos para evitar condições de corrida.
Tudo bem, agora estamos seguros para passar para as boas práticas ⬇️
Se você pretende executar uma tarefa assíncrona, para obter alguns dados de uma API por exemplo, e atualizar o estado de carregamento do seu componente, você precisa definir a função dentro do gancho e depois chamá-la:
useEffect(() => {
async function getData() {
setLoading(false);
const reponse = await myApi.getSomeGoodData()
setLoading(true);
}
getData();
},[]);
Se você planeja reutilizar a função assíncrona definida, uma boa ideia é defini-la no corpo do componente funcional, encapsulado pelo useCallbackgancho. Confira:
const getData = useCallback(() => {
setLoading(false);
const reponse = await myApi.getSomeGoodData()
setLoading(true);
}, [])
useEffect(() => {
getData()
},[getData])
Os 2 exemplos anteriores foram focados principalmente em buscar dados e atualizar o estado do componente. Este é para mostrar também um cenário comum para tarefas assíncronas dentro de useEffect que está definindo um intervalo ou um tempo limite.
O truque para isso é SEMPRE limpar o tempo limite e o intervalo definido no arquivo useEffect.
useEffect(() => {
const timeout = setTimeout(() => {
// do something
}, 100)
return () => {
clearTimeout(timeout);
}
},[])
useEffect(() => {
const interval = setInterval(() => {
// do something
}, 100)
return () => {
clearInterval(interval);
}
},[])
Os exemplos acima cobrirão 99,99% das situações assíncronas que você pode encontrar durante o desenvolvimento do React. Apenas lembre-se de estar atento às dependências do efeito. Se você não encontrou o seu caso nos exemplos abaixo, deixe um comentário e eu analisarei.
Obrigado por ler
—- Fernando Abolafio
Quando você faz uma solicitação para facebook.com, seu computador procura o nome de domínio para traduzir esse nome de domínio em um endereço IP para que seu computador possa fazer essa conexão.
Em 2022, fiz a transição de uma função não técnica para a segurança cibernética. Eu tive meu primeiro diploma em língua alemã, sei que você está chocado e curioso sobre como consegui fazer a transição com sucesso. Bem, simplesmente aconteceu.
No mundo acelerado e competitivo de hoje, a carreira desempenha um papel significativo no crescimento pessoal, na estabilidade financeira e na satisfação geral com a vida. No entanto, muitos indivíduos encontram-se presos em um ciclo implacável de estagnação e insatisfação, definhando gradualmente em suas vidas profissionais.
Mudar para uma nova carreira pode ser extremamente desafiador se você tentar fazer isso sozinho. É importante encontrar parceiros de responsabilidade que estejam no mesmo nível de aprendizado que você, que compartilhem objetivos, tenacidade e motivação semelhantes.
“Ei, Siri, toque Me Dive, de Olivia Dean.” Era maio de 2021 quando comecei meu estágio na Future Academy Africa em Akure, Nigéria.
“Ele vai me proteger quando eu estiver em perigo. Ele me esconderá em sua tenda.