Como evitar perda de dados ao recarregar uma página no React Router
Recarregar uma página em uma aplicação React pode resultar na perda de dados que o usuário estava inserindo ou no estado atual da aplicação. Isso é especialmente comum em formulários ou em páginas onde o estado é gerenciado localmente. Neste tutorial, vamos explorar algumas técnicas para evitar essa perda de dados utilizando o React Router.
Entendendo o problema
Quando um usuário recarrega a página, o React não consegue manter o estado interno de componentes não persistidos. Isso significa que qualquer dado que não foi salvo em um banco de dados ou em um estado global pode ser perdido. Por exemplo, se o usuário estava preenchendo um formulário e decide recarregar a página, todos os dados inseridos serão apagados. Portanto, é essencial implementar uma solução.
Utilizando o Local Storage
Uma das abordagens mais simples para evitar a perda de dados é utilizar o Local Storage do navegador. O Local Storage permite armazenar dados no navegador do usuário, mesmo após o recarregamento da página. Veja um exemplo prático:
import React, { useState, useEffect } from 'react';
const Formulario = () => {
const [nome, setNome] = useState('');
useEffect(() => {
const storedNome = localStorage.getItem('nome');
if (storedNome) {
setNome(storedNome);
}
}, []);
const handleSubmit = (e) => {
e.preventDefault();
localStorage.setItem('nome', nome);
alert('Nome salvo!');
};
return (
<form onSubmit={handleSubmit}>
<input
type="text"
value={nome}
onChange={(e) => setNome(e.target.value)}
placeholder="Digite seu nome"
/>
<button type="submit">Salvar</button>
</form>
);
};
export default Formulario;
No código acima, estamos utilizando o useEffect
para buscar um valor previamente salvo no Local Storage assim que o componente é montado. Se houver um nome armazenado, ele é definido no estado do input, permitindo que o usuário continue de onde parou. Ao enviar o formulário, o nome é salvo novamente no Local Storage.
Manipulando o estado global com Context API
Outra abordagem para evitar a perda de dados é utilizar a Context API para gerenciar o estado de forma global. Ao centralizar o estado, é possível manter os dados acessíveis em toda a aplicação, mesmo após um recarregamento. Aqui está um exemplo de como implementar isso:
import React, { createContext, useContext, useState } from 'react';
const FormularioContext = createContext();
const FormularioProvider = ({ children }) => {
const [nome, setNome] = useState('');
return (
<FormularioContext.Provider value={{ nome, setNome }}>
{children}
</FormularioContext.Provider>
);
};
const Formulario = () => {
const { nome, setNome } = useContext(FormularioContext);
const handleSubmit = (e) => {
e.preventDefault();
alert('Nome salvo: ' + nome);
};
return (
<form onSubmit={handleSubmit}>
<input
type="text"
value={nome}
onChange={(e) => setNome(e.target.value)}
placeholder="Digite seu nome"
/>
<button type="submit">Salvar</button>
</form>
);
};
const App = () => (
<FormularioProvider>
<Formulario />
</FormularioProvider>
);
export default App;
Neste exemplo, o FormularioProvider
envolve toda a aplicação, permitindo que qualquer componente dentro dele tenha acesso ao estado do nome. Essa técnica é essencial para evitar a perda de dados em aplicações mais complexas.
Considerações sobre a navegação
Além de armazenar dados, é importante considerar como a navegação afeta o estado. O React Router possui a capacidade de gerenciar o histórico de navegação, o que pode ser utilizado para preservar estados. Utilizar o useHistory
e o useLocation
pode ajudar a controlar como os dados são passados entre as páginas.
Conclusão
Evitar a perda de dados ao recarregar uma página no React Router é uma questão importante para garantir uma boa experiência do usuário. Ao utilizar técnicas como Local Storage ou Context API, é possível manter os dados acessíveis e melhorar a usabilidade da aplicação. Experimente implementar essas soluções e veja como sua aplicação pode se tornar mais robusta e amigável para os usuários.
Estratégias para garantir a preservação de dados em aplicações React
A gestão de estado é uma parte fundamental no desenvolvimento de aplicações com React, especialmente ao utilizar o React Router. Quando os usuários interagem com formulários ou outras componentes que requerem entrada de dados, a perda dessa informação ao recarregar a página pode ser frustrante. Portanto, é crucial implementar estratégias que garantam que os dados sejam preservados. Neste texto, discutiremos algumas práticas recomendadas e abordagens para evitar essa perda de dados, proporcionando uma experiência de usuário mais fluida e intuitiva.
Algumas aplicações:
- Formulários de cadastro
- Aplicativos de tarefas
- Sites de e-commerce
Dicas para quem está começando
- Use Local Storage para persistir dados simples.
- Considere a Context API para gerenciar estados complexos.
- Mantenha sempre o estado sincronizado com a interface do usuário.

Gabriel Nogueira
Desenvolvedor front-end especializado em React e design de interfaces responsivas.
Mais sobre o autor