Entenda como Gerenciar o Histórico de Navegação com Redux e React Router

Aprenda a integrar Redux com React Router para gerenciar o histórico de navegação.

Gerenciando o Histórico de Navegação com Redux e React Router

Em aplicações modernas, a navegação entre páginas é uma parte fundamental da experiência do usuário. Quando utilizamos o React Router para gerenciar rotas, pode ser interessante armazenar o histórico de navegação em um estado global, como o Redux. Isso permite que possamos acessar e manipular o histórico conforme necessário. Neste tutorial, vamos explorar como podemos implementar esse recurso de maneira eficiente.

Por que usar Redux para armazenar o histórico?

O Redux proporciona um estado centralizado que pode ser acessado de qualquer componente da aplicação. Ao armazenar o histórico de navegação, conseguimos:

  • Rastrear as páginas visitadas pelo usuário.
  • Implementar funcionalidades como "voltar" e "avançar" na navegação.
  • Analisar o comportamento do usuário para melhorar a experiência.

Instalando as dependências

Antes de começarmos, certifique-se de ter o Redux e o React Router instalados em sua aplicação. Você pode fazer isso usando o seguinte comando:

npm install redux react-redux react-router-dom

Este comando instalará as bibliotecas necessárias para que possamos implementar nosso gerenciamento de estado e rotas.

Configurando o Redux

Primeiro, precisamos configurar o Redux. Crie um novo arquivo chamado store.js e adicione o seguinte código:

import { createStore } from 'redux';

const initialState = {
  history: []
};

const reducer = (state = initialState, action) => {
  switch (action.type) {
    case 'ADD_TO_HISTORY':
      return { ...state, history: [...state.history, action.payload] };
    default:
      return state;
  }
};

const store = createStore(reducer);
export default store;

Neste trecho, estamos criando um estado inicial que contém um array history. O reducer manipula o estado com base nas ações que recebemos. A ação ADD_TO_HISTORY é responsável por adicionar uma nova entrada ao histórico.

Integrando Redux com React Router

Agora que temos nossa store configurada, vamos integrá-la ao React Router. Abra o arquivo principal da sua aplicação, geralmente index.js, e faça as seguintes alterações:

import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import { BrowserRouter as Router } from 'react-router-dom';
import store from './store';
import App from './App';

ReactDOM.render(
  <Provider store={store}>
    <Router>
      <App />
    </Router>
  </Provider>,
  document.getElementById('root')
);

Aqui estamos utilizando o Provider do Redux para dar acesso à store em toda a nossa aplicação. Agora, vamos adicionar a lógica para armazenar o histórico de navegação.

Armazenando a navegação

Crie um componente HistoryTracker.js que irá escutar as alterações nas rotas:

import React, { useEffect } from 'react';
import { useLocation } from 'react-router-dom';
import { useDispatch } from 'react-redux';

const HistoryTracker = () => {
  const location = useLocation();
  const dispatch = useDispatch();

  useEffect(() => {
    dispatch({ type: 'ADD_TO_HISTORY', payload: location.pathname });
  }, [location.pathname, dispatch]);

  return null;
};

export default HistoryTracker;

Neste componente, utilizamos o useLocation para acessar a localização atual e o useDispatch para enviar a ação de adicionar a nova rota ao histórico sempre que a location.pathname mudar. Isso garante que cada nova navegação será registrada.

Usando o componente HistoryTracker

Por fim, vamos incluir o HistoryTracker em nosso componente App.js ou onde você gerencia suas rotas:

import React from 'react';
import { Route, Switch } from 'react-router-dom';
import HistoryTracker from './HistoryTracker';

const App = () => {
  return (
    <> 
      <HistoryTracker />
      <Switch>
        <Route path="/home" component={Home} />
        <Route path="/about" component={About} />
        {/* outras rotas */}
      </Switch>
    </>
  );
};

export default App;

Visualizando o histórico

Agora que temos o histórico armazenado no Redux, podemos acessá-lo a partir de qualquer componente. Por exemplo, crie um componente HistoryDisplay.js:

import React from 'react';
import { useSelector } from 'react-redux';

const HistoryDisplay = () => {
  const history = useSelector((state) => state.history);

  return (
    <div>
      <h3>Histórico de Navegação</h3>
      <ul>
        {history.map((path, index) => (<li key={index}>{path}</li>))}
      </ul>
    </div>
  );
};

export default HistoryDisplay;

Esse componente simplesmente exibe o histórico de navegação em uma lista. Você pode adicionar este componente onde desejar dentro de sua aplicação.

Conclusão

Neste tutorial, aprendemos a armazenar o histórico de navegação usando Redux e React Router. Essa abordagem permite que tenhamos um maior controle sobre a navegação do usuário, melhorando a experiência da aplicação. Com isso, você pode implementar funcionalidades como "voltar" e "avançar" na navegação e analisar o comportamento dos usuários.

Experimentar com essa implementação em suas aplicações pode levar a insights valiosos sobre como os usuários interagem com seu site. Boa codificação!

O gerenciamento do histórico de navegação é crucial para a experiência do usuário em aplicações web. Com o aumento das interações e a complexidade das aplicações, é fundamental ter um controle preciso sobre as rotas acessadas pelos usuários. Integrando Redux com React Router, você pode ter acesso a esse histórico de forma eficiente e organizada, permitindo que sua aplicação se torne muito mais dinâmica e responsiva às necessidades dos usuários.

Algumas aplicações:

  • Melhorar a navegação em aplicações complexas.
  • Implementar funcionalidades de "voltar" e "avançar".
  • Analisar o comportamento do usuário.
  • Otimizar a experiência do usuário.

Dicas para quem está começando

  • Entenda a estrutura do Redux antes de implementá-lo.
  • Pratique com exemplos simples de gerenciamento de estado.
  • Explore a documentação do React Router para conhecer suas funcionalidades.
  • Teste suas implementações antes de integrá-las em projetos maiores.

Contribuições de Gabriel Nogueira

Compartilhe este tutorial: Como armazenar o histórico de navegação no Redux ao usar React Router?

Compartilhe este tutorial

Continue aprendendo:

Como criar um sistema de navegação passo a passo com React Router?

Aprenda a criar um sistema de navegação em React com React Router de forma simples e prática.

Tutorial anterior

Como sincronizar a URL com estados internos da aplicação no React Router?

Entenda como sincronizar estados internos com a URL em aplicações React usando React Router.

Próximo tutorial