RuL*_*Lee 2 javascript reactjs react-router
我一直在开发一个导航栏。我写了一个函数来切换屏幕并在按钮 onClick 中调用它。我也包裹了组件withRouter。但是出现以下错误:
未捕获的类型错误:history.push 不是函数”错误。
这是我的代码:
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);
Run Code Online (Sandbox Code Playgroud)
谢谢
gdi*_*ble 14
react-router-domv5 \xe2\x86\x92 v6 迁移旧的useHistory已被替换为useNavigate
\n\n\n
旧的 v5 代码:
\nimport { useHistory } from \'react-router-dom\';\n\nconst history = useHistory();\nhistory.push(`/Search?${queryString}`);\nRun Code Online (Sandbox Code Playgroud)\n新的 v6 代码:
\nimport { useNavigate } from \'react-router-dom\';\n\nconst navigate = useNavigate();\nnavigate(`/Search?${queryString}`);\nRun Code Online (Sandbox Code Playgroud)\n
您已经用 包裹了Navigation组件withRouter,因此您需要通过组件的 props 访问历史对象。您可以选择分解道具,如下所示:
function Navigation({ history }) {
const abc = path => {
history.push(path);
};
return (
<button onClick={() => abc('/user')}>User</button>
);
}
export default withRouter(Navigation);
Run Code Online (Sandbox Code Playgroud)
由于您正在使用功能组件,因此另一种做事方式是使用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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7743 次 |
| 最近记录: |