开发者问题收集

导入错误:“useHistory”未从“react-router-dom”导出

2021-09-19
23948

我正在尝试从“react-router-dom”导入 useHistory,但是,我收到此错误:导入错误:“useHistory”未从“react-router-dom”导出。

我也检查了其他答案,例如 尝试导入错误:“useHistory”未从“react-router-dom”导出 这个,但无济于事。我的 package.json 看起来像这样

package.json

我正在使用 useHistory,

import React from 'react';
import { useState, useEffect } from 'react';
import { useHistory } from 'react-router-dom';

export default function Login(){
    const history = useHistory();
    console.log(history)
}

但是,此行工作正常,不会导致从 react-router-dom 导入问题。

import {BrowserRouter as Router, Switch, Route} from 'react-router-dom'

有人知道如何解决这个问题吗?非常感谢。

3个回答

UseHistory 已被 useNavigate 取代 所以试试这个👇👇

import { useNavigate } from 'react-router-dom';

在你的函数内部:

const navigate = useNavigate();
navigate('/home')

我希望这有效👌

Attah Aaron
2021-11-14

useNavigate 如果您安装了 v6 或更高版本 react-router-dom": ^6.2.1

import { useNavigate } from "react-router-dom";

 let navigate = useNavigate();


 const onSubmit = async (e) => {
    e.preventDefault();
    await axios.post("http://localhost:3001/users", user);
    navigate(`/`);
 };
Sarthak Raval
2021-12-31

您的问题的正确答案是,您需要确认您对历史记录钩子的使用是在 BrowserRouter 的范围内 - 一个快速的解决方法是将 BrowserRouter 组件上移到 app.js 或 index.js 级别 - 只要您在 BrowserRouter 上下文中已经存在的组件范围内调用 useHistory 钩子,那么在 v5 中就不会出现任何问题。评论 v6 的人仍然需要做同样的修复,答案是不升级,尽管如果你有能力升级,我会这样做。

建议的修复:在 index.js 上渲染 BrowserRouter

// index.js
...
import { BrowserRouter } from 'react-router-dom' // <=V5 not compatible with V6

render(<BrowserRouter><App /></BrowserRouter>, document.getElementById('root'));
...

然后在组件内加载的任何组件上,您都可以使用 useHistory

了解有关历史记录的更多信息以及它可以在何处加载 - https://github.com/remix-run/history

Ian Rios
2022-01-25