Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Quando trabalhamos com React e precisamos avisar o usuário antes dele sair de uma página onde há um editor de texto, a solução mais prática envolve o uso do evento beforeunload do navegador.
Você já declarou um estado que fica true ao começar a digitar, o que é ótimo para controlar a mudança de conteúdo. Agora, o desafio é fazer o React escutar o evento de saída da página e exibir uma mensagem de alerta.
Um ponto importante é que, por padrão, o navegador não permite customizar a mensagem do beforeunload, apenas exibir uma mensagem padrão de aviso. Então, o fluxo seria: Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
1. Quando o usuário começa a editar, você adiciona um listener para o evento beforeunload.
2. Se o usuário tentar sair, o navegador dispara o evento, e a mensagem padrão é exibida.
3. Ao salvar ou descartar as mudanças, remova o listener para evitar alertas desnecessários.
No React, isso pode ser feito usando o hook useEffect. Veja um exemplo rápido:
useEffect(() => {
if (hasUnsavedChanges) {
const handleBeforeUnload = (e) => {
e.preventDefault(). e.returnValue = ''. }. window.addEventListener('beforeunload', handleBeforeUnload). return () => {
window.removeEventListener('beforeunload', handleBeforeUnload). }
}
}, [hasUnsavedChanges]).
Esse padrão ajuda a evitar surpresas na navegação. Mas é preciso ficar atento que a mensagem do alerta não é controlável, só a confirmação de que há mudanças. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
Vamos lá, quem já fez algo assim? Tem alguma dica pra melhorar essa abordagem? A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Exatamente, aqui na operação a gente tenta sempre limpar o evento assim que o usuário salva ou cancela, evita ruído na navegação. O problema é quando a gente esquece e fica ativado, dá false alarms.
Boa, mas cuidado pra não deixar esse evento ativo o tempo todo, pq pode atrapalhar navegação normal se não for removido quando não necessário.
Concordo com o Guto, a validação do estado é bem importante.
No front tambem rola muito esse tipo de alerta mas e importante pensar na experiencia. As vezes o usuario fica assustado com o alerta padrao e acha que algo deu errado. Melhor informar na UI mesmo se possivel.