2 回答

TA贡献1853条经验 获得超9个赞
当你使用 react-router-dom 时,你不应该使用 history.push()。尝试使用 Redirect from react-router-dom 代替。
只需使用名为 redirect 的状态并将其设置为您想要使用函数的新路由:
onClick={() => this.setState({ redirect: 'newpath' }};
然后像这样在你的渲染中放一个 return:
if (this.state.redirect) {
return <Redirect to={this.state.redirect} />;
}
return (
...rest of your render
);

TA贡献2051条经验 获得超10个赞
我对 React 以及它周围的很多东西都是危险的新手,但我自己在最后一天一直在努力解决这个问题。因此,这可能是非常糟糕的建议,原因有很多。但这是我的情况,也是我如何让它发挥作用的。
function newSongRedirect() {
history.push("/SongDetail/0");
history.go(0);
}
并将其连接到我的按钮:
<button onClick={() => newSongRedirect() } >New Song</button>
似乎 history.push 将值添加到历史记录中,但不会导致对其进行操作。作为现在的第一个项目,history.go(0)然后使其对其进行操作。
我已经看到一些帖子引用了 history.push 如果你嵌套在 a 中就不能使用<BrowserRouter>,但在我的情况下,试图在我的 index.js 中替换它只会导致其他问题。
另外,我发现这篇文章是从看起来是 React 路由器团队的一员中找到的。当他们有机会时,似乎 useHistory 挂钩将被替换。
注意:useHistory 钩子是我们正在研究的未来钩子的快速权宜之计:useNavigate。useNavigate 将提供一个更紧密地对齐的 API,并将解决一些直接在路由器中使用历史 API 的长期问题(它可能看起来很像 @reach/router 的导航 API)。我们现在提供 useHistory 以尽可能轻松地迁移使用历史 API 的现有代码。
添加回答
举报