发生“Uncaught TypeError: history.push is not a function”错误
2020-05-29
40160
我一直在开发导航栏。我编写了一个切换屏幕的函数并在按钮 onClick 中调用它。我也将组件包装在
withRouter
中。但出现以下错误:
Uncaught TypeError: history.push is not a function" error.
这是我的代码:
import { withRouter } from 'react-router-dom';
function Navigation(history) {
const abc = path => {
history.push(path);
};
return(
<button onClick={() => abc('/user')}>User</button>
);}
export default withRouter(Navigation);
谢谢
3个回答
根据
react-router-dom
v5 → v6 迁移
旧的
useHistory
已被
useNavigate
取代>
旧 v5 代码:
import { useHistory } from 'react-router-dom';
const history = useHistory();
history.push(`/Search?${queryString}`);
新 v6 代码:
556364714
gdibble
2022-04-06
您已使用
withRouter
包装了
Navigation
组件,因此您需要通过组件的 props 访问 history 对象。您可以选择解构您的 props,如下所示:
function Navigation({ history }) {
const abc = path => {
history.push(path);
};
return (
<button onClick={() => abc('/user')}>User</button>
);
}
export default withRouter(Navigation);
由于您正在使用功能组件,因此另一种方法是使用
useHistory
钩子,这样您就无需使用
withRouter
包装您的组件:
import { useHistory } from 'react-router-dom';
function Navigation(props) {
const history = useHistory();
const abc = path => {
history.push(path);
};
return (
<button onClick={() => abc('/user')}>User</button>
);
}
export default Navigation;
wentjun
2020-05-29
试试这个,对我有用。
使用
history(path)
代替
history.push(path)
function NavItem1(props) { //Navigate to the home page
const history = useNavigate();
const redirect = path => {
history(path);
};
return (
<a href="#" className="icon-button" onClick={() => redirect('/')} >
{props.icon}
</a>
)
}
Raiden Choong
2021-12-19