Pesquisa de site

reactjs - Alternativa à antiga função CreateBrowserHistory() no React Router v6


Quero adicionar uma nova rota no histórico do meu aplicativo e, como você sabe, o hook UseHistory() e a função CreateBrowserHistory() (para criar um histórico definido pelo usuário) foram removidos na nova versão 6. Sei que posso usar o hook UseNavigate e fazer esse trabalho com a função Navigate(), mas esse hook não pode ser chamado no nível superior e deve ser chamado em um componente de função do React. Os códigos abaixo mostram como poderíamos fazer isso com a versão 5.1 do React Router:

Passando o history para o componente pai e exportando o mesmo objeto history para usá-lo em qualquer lugar na Aplicação:

import React from 'react'
import { Router } from 'react-router-dom'
import { createBrowserHistory } from 'history' // which comes along with React-Router

export const history = createBrowserHistory();

const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement)
root.render(
    <Router history={history}>
        <App />
    </Router>
)

Usando o objeto history exportado em outro lugar da Aplicação no nível superior:

switch (status) {
    case 404:
        history.push('/not-found');
        break

se eu quiser fazer isso no nível superior na nova versão do 6, o que você recomenda?

Resposta #1

Na versão 6, use useNavigate como abaixo:

let navigate = useNavigate()

navigate('/not-found')

este hook não pode ser chamado no nível superior, então você pode passá-lo para a função navigate para a função onde você quer chamá-lo.