Manutenção do Estado ao Navegar entre Rotas no React

Aprenda como garantir que o estado da sua aplicação React seja preservado durante a navegação entre rotas.

Como navegar entre rotas sem que a aplicação perca o estado atual?

Ao desenvolver aplicações em React, um dos desafios que encontramos frequentemente é a preservação do estado da aplicação ao navegar entre diferentes rotas. Vamos explorar algumas técnicas que podem nos ajudar a resolver esse problema de forma eficiente.

O que é o estado em uma aplicação React?

O estado em uma aplicação React refere-se aos dados que determinam como a interface do usuário é exibida em um dado momento. Quando o estado muda, o React atualiza automaticamente a interface para refletir essas mudanças. No entanto, ao navegar entre rotas, o estado pode ser perdido se não forem adotadas as estratégias corretas.

Utilizando Context API para manter o estado

Uma das abordagens mais eficazes para manter o estado em uma aplicação React é o uso da Context API. A Context API permite que você compartilhe valores entre componentes sem precisar passar props manualmente em cada nível da árvore de componentes.

import React, { createContext, useContext, useState } from 'react';

const StateContext = createContext();

export const StateProvider = ({ children }) => {
    const [state, setState] = useState({});
    return (
        <StateContext.Provider value={{ state, setState }}>
            {children}
        </StateContext.Provider>
    );
};

export const useGlobalState = () => useContext(StateContext);

Neste código, estamos criando um contexto para armazenar o estado da aplicação e um provedor para envolvê-lo em nossa árvore de componentes. Isso nos permite acessar o estado globalmente, mesmo quando navegamos entre diferentes rotas.

Implementando com React Router

Quando utilizamos o React Router, precisamos garantir que o provedor de estado envolva toda a aplicação. Veja um exemplo:

import React from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import { StateProvider } from './StateContext';
import Home from './Home';
import About from './About';

const App = () => {
    return (
        <StateProvider>
            <Router>
                <Switch>
                    <Route path="/" exact component={Home} />
                    <Route path="/about" component={About} />
                </Switch>
            </Router>
        </StateProvider>
    );
};

export default App;

Ao envolver o Router no StateProvider, garantimos que o estado esteja acessível em todas as rotas da nossa aplicação.

Persistindo o estado com localStorage

Além de usar a Context API, você pode querer persistir o estado da aplicação mesmo após o usuário atualizar a página ou fechar o navegador. Para isso, podemos utilizar o localStorage.

const saveStateToLocalStorage = (state) => {
    localStorage.setItem('appState', JSON.stringify(state));
};

const loadStateFromLocalStorage = () => {
    const savedState = localStorage.getItem('appState');
    return savedState ? JSON.parse(savedState) : {};
};

const [state, setState] = useState(loadStateFromLocalStorage());

useEffect(() => {
    saveStateToLocalStorage(state);
}, [state]);

Neste exemplo, estamos salvando o estado da aplicação no localStorage sempre que ele é atualizado. Isso nos permite recuperar o estado mesmo após um refresh na página.

Conclusão

Manter o estado da sua aplicação React ao navegar entre rotas é uma parte essencial para criar uma experiência de usuário fluida e sem interrupções. Utilizando a Context API em conjunto com o React Router e técnicas de persistência como localStorage, você pode construir aplicações mais robustas e responsivas. Lembre-se de testar bem suas implementações e considerar as necessidades específicas do seu projeto para escolher a melhor abordagem.

Próximos passos

Se você deseja se aprofundar ainda mais, considere explorar bibliotecas como Redux ou Zustand, que oferecem soluções mais complexas para o gerenciamento de estado em aplicações React. Não hesite em experimentar e encontrar a abordagem que melhor se adapta à sua aplicação!

Entender como gerenciar o estado em uma aplicação React é crucial para o sucesso de qualquer projeto. O estado é a alma da sua aplicação, e quando ele é perdido durante a navegação, a experiência do usuário pode ser drasticamente afetada. Por isso, neste guia, apresentamos soluções práticas e eficazes para garantir que seu aplicativo mantenha seu estado, mesmo ao trocar de rotas. Explore as técnicas apresentadas e implemente-as em seus projetos para melhorar a usabilidade e a performance da sua aplicação.

Algumas aplicações:

  • Aplicações de e-commerce que precisam preservar o carrinho de compras.
  • Dashboards que exibem informações em tempo real.
  • Formulários multi-etapas que requerem a retenção de dados.

Dicas para quem está começando

  • Familiarize-se com o Context API do React.
  • Experimente usar o localStorage para persistência de estado.
  • Teste suas rotas e estados para garantir uma navegação fluida.

Contribuições de Gabriel Nogueira

Compartilhe este tutorial: Como navegar entre rotas sem que a aplicação perca o estado atual?

Compartilhe este tutorial

Continue aprendendo:

Como restaurar a rolagem da página ao voltar para uma rota anterior no React Router?

Aprenda a manter a posição da rolagem ao navegar entre rotas no React Router.

Tutorial anterior

Como usar useOutlet para renderizar conteúdo dentro de um layout no React Router?

Entenda como usar o useOutlet para renderizar conteúdo em layouts com React Router.

Próximo tutorial