Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Como garantir atualização da página

Na página FormularioRestaurante, após submeter o formulário, eu adicionei o navigate(-1) (do React Router) para retornar à página anterior, que exibe a lista de restaurantes. No entanto, percebi que, ao voltar para a página, o nome atualizado do restaurante não aparece imediatamente, pois a lista não é recarregada. Minha solução foi envolver o navigate(-1) em um setTimeout, para que a atualização do backend tenha tempo de completar antes de navegar:

  const navigate = useNavigate()

  const aoSubmeterForm = (evento: React.FormEvent<HTMLFormElement>) => {
    evento.preventDefault()

    if (parametros.id) {
      axios.put(`${URL}${parametros.id}/`, { nome: nomeRestaurante })
        .then((resposta) => {
          alert(`Restaurante ${nomeRestaurante} atualizado com sucesso!`)
        }).catch((erro) => {
          console.log(erro)
        });
    } else {
      axios.post(URL, { nome: nomeRestaurante })
        .then((resposta) => {
          alert(`Restaurante ${nomeRestaurante} cadastrado com sucesso!`)
        }).catch((erro) => {
          console.log(erro)
        });
    }

    // volta para a tela anterior
    setTimeout(() => {
      navigate(-1)
    }, 1000);
  }

Embora isso funcione, não parece uma solução ideal. Quero saber: qual seria a melhor prática para lidar com essa situação e garantir que a página anterior exiba os dados atualizados?

Desde já, obrigado!

2 respostas
solução!

Oi Vitor! Tudo bem?

Usar setTimeout para atrasar a navegação não é a solução mais elegante, pois depende do tempo de resposta da requisição e pode não ser confiável em todas as situações.

Uma abordagem mais robusta seria garantir que a lista de restaurantes seja atualizada sempre que você retornar à página. Trouxe duas sugestões pra ajudar com isso:

  1. Estado Global ou Contexto: você pode usar um estado global (como Redux) ou o Context API do React e atualizar o estado global com os dados mais recentes do restaurante assim que a requisição for concluída. Quando você voltar à página anterior, ela automaticamente refletirá as mudanças.

  2. Recarregar os Dados ao Entrar na Página: outra abordagem é garantir que a página que lista os restaurantes sempre busque os dados mais recentes da API ao ser montada. Você pode fazer isso utilizando o useEffect na página de listagem para buscar os dados sempre que a página for carregada.

    useEffect(() => {
      axios.get(URL)
        .then(response => {
          setRestaurantes(response.data);
        })
        .catch(error => {
          console.error("Erro ao buscar restaurantes:", error);
        });
    }, []);
    

Essas abordagens ajudam a garantir que você sempre tenha os dados mais atualizados sem depender de atrasos artificiais. A maneira que fez não está errada, mas pode adicionar essas abordagens que citei em seus estudos futuros :)

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada!

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Oi Rafaela! Obrigado pelos insights!!

Fiz alguns testes com as abordagens que recomendou e isso me ajudou muito a entender melhor o React!

Abraços!