- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 React Router 的新 useHistory 钩子(Hook),它是几周前发布的。我的 React-router 版本是 5.1.2。我的 React 版本是 16.10.1。您可以在底部找到我的代码。
然而,当我从react-router导入新的useHistory时,我收到此错误:
未捕获类型错误:无法读取未定义的属性“历史记录”
这是由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 路由器 Hook (例如 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>
)
}
最佳答案
这是因为react-router
该组件中未设置上下文。因为它是<Router>
设置您可以使用的上下文的组件 useHistory
在子组件中,但不在那个组件中。
这是解决此问题的一个非常基本的策略:
const AppWrapper = () => {
return (
<Router> // Set context
<App /> // Now App has access to context
</Router>
)
}
const App = () => {
let history = useHistory(); // Works!
...
// Render routes in this component
然后请确保使用“包装器”组件而不是 App
直接。
关于reactjs - 无法读取未定义的属性 'history'(React Router 5的useHistory钩子(Hook)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58220995/
使用 React 功能组件和 Typescript,使用 useHistory hook 和 RouteComponentProps (react router v5.1) 有什么区别吗? 使用 Ro
当按下主页按钮时,我想将其重定向到主页“/”。但我收到此错误。我能做什么 ? : import { Route, useHistory } from 'react-router-dom/cjs/rea
我正在使用react-router-dom和redux。我在调度后使用history.push(“/”),但它显示错误。我希望用户在成功身份验证后导航到“/”(使用 GOOGLE) exp
我正在使用react-router-dom和redux。我在调度后使用history.push(“/”),但它显示错误。我希望用户在成功身份验证后导航到“/”(使用 GOOGLE) exp
我正在做一个谷歌克隆(迷你项目),因为我需要从 react-router-dom 导入 useHistory。 我已按照以下步骤操作: 第 1 步:npm install --save react-r
我正在使用 react-router-dom v6.0.0-beta.0 和 reac-redux 7.2.2 并想通过使用 useState 钩子(Hook)来编辑状态值,但是当我单击 EditIc
您好,我正在尝试使用 this.history.push({ pathname: `/search-results`,
我正在尝试使用 usehistory Hook 将注册功能重定向到 react 主页当我运行我的代码时,它显示这样的错误:: export 'useHistory' (imported as 'use
我正在尝试使用 usehistory Hook 将注册功能重定向到 react 主页当我运行我的代码时,它显示这样的错误:: export 'useHistory' (imported as 'use
在 react-router-dom v 5.2.0 上,useHistory 的导入返回“undefined”(即使在 console.log() 中) 基本上,我正在尝试构建一个选项菜单导航栏,让
使用此代码: import { Link, useHistory } from "react-router-dom"; ... const history = useHistory(); ... hi
我已经实现了 useHistory() 与我在下面实现的相同,以前我没有收到任何错误,但在这个组件中我收到了一个错误 Line 6:18: React Hook "useHistory" is cal
我有一个包含多个应用程序和库的 monorepo,效果非常好(基于 yarn )。我最近做了一些重构,并确定了一个我想在我的“公共(public)”库中“外包”的公共(public)组件。这包含一个使
我正在制作一个类似于应用程序的 CRUD 博客,当我发布或编辑博客时,我使用 history.push() 重定向用户,但是当用户被重定向时,如果我刷新页面,信息仍然是旧的,内容被更新.在过去的一天里
我想在我的 react 应用程序中集成一个 AI 语音助手 Alan AI 所以基本上想使用语音命令重定向页面。 但问题是,我想使用 useHistory 钩子(Hook)的 push 方法来更改页面
我在React Router v5.1.2中使用TypeScript使用UseHistory钩子(Hook)?运行单元测试时,我遇到了问题。 TypeError: Cannot read proper
我得到的错误是 Cannot read property 'history' of undefined .我已正确导入 useHistory()来自 react-router-dom 的钩子(Hook
这个问题在这里已经有了答案: Cannot read property 'history' of undefined (useHistory hook of React Router 5) (7 个回
使用方法useHistory()正确吗?我无法从一个 react 组件过渡到另一个。 根据 React 文档和 Stack Overflow 上的说明,我无法从 App.js 过渡到 MyCompon
我正在尝试从“react-router-dom”导入 useHistory,但是,我收到此错误:导入错误:“useHistory”未从“react-router-dom”导出。 我也检查了其他答案,例
我是一名优秀的程序员,十分优秀!