【发布时间】:2020-02-01 21:11:22
【问题描述】:
我正在使用几周前发布的 React Router 的新 useHistory 钩子。我的 React-router 版本是 5.1.2。我的 React 版本为 16.10.1。你可以在底部找到我的代码。
然而,当我从 react-router 导入新的 useHistory 时,我得到了这个错误:
Uncaught TypeError: Cannot read property 'history' of undefined
这是由 React-router 中的这一行引起的
function useHistory() {
if (process.env.NODE_ENV !== "production") {
!(typeof useContext === "function") ? process.env.NODE_ENV !== "production" ? invariant(false, "You must use React >= 16.8 in order to use useHistory()") : invariant(false) : void 0;
}
return useContext(context).history; <---------------- ERROR IS ON THIS LINE !!!!!!!!!!!!!!!!!
}
由于它与 useContext 相关,并且可能与上下文冲突是错误的,因此我尝试完全删除对 useContext 的所有调用,创建提供程序等。但是,这没有任何作用。尝试使用 React v16.8;一样。 我不知道是什么原因造成的,因为 React 路由器的所有其他功能都可以正常工作。
***请注意,调用其他 React 路由器钩子时也会发生同样的事情,例如 useLocation 或 useParams。
有没有其他人遇到过这种情况?关于可能导致这种情况的任何想法? 任何帮助都将不胜感激,因为我在网上找不到与此问题相关的任何内容。
import React, {useEffect, useContext} from 'react';
import { BrowserRouter as Router, Route, Link } from "react-router-dom";
import { Switch, useHistory } from 'react-router'
import { useTranslation } from 'react-i18next';
import lazyLoader from 'CommonApp/components/misc/lazyLoader';
import {AppContext} from 'CommonApp/context/context';
export default function App(props) {
const { i18n } = useTranslation();
const { language } = useContext(AppContext);
let history = useHistory();
useEffect(() => {
i18n.changeLanguage(language);
}, []);
return(
<Router>
<Route path="/">
<div className={testClass}>HEADER</div>
</Route>
</Router>
)
}
【问题讨论】:
标签: reactjs react-router react-hooks react-router-dom react-context