2 回答
TA貢獻1853條經驗 獲得超9個贊
當你使用 react-router-dom 時,你不應該使用 history.push()。嘗試使用 Redirect from react-router-dom 代替。
只需使用名為 redirect 的狀態(tài)并將其設置為您想要使用函數的新路由:
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 以及它周圍的很多東西都是危險的新手,但我自己在最后一天一直在努力解決這個問題。因此,這可能是非常糟糕的建議,原因有很多。但這是我的情況,也是我如何讓它發(fā)揮作用的。
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 中替換它只會導致其他問題。
另外,我發(fā)現這篇文章是從看起來是 React 路由器團隊的一員中找到的。當他們有機會時,似乎 useHistory 掛鉤將被替換。
注意:useHistory 鉤子是我們正在研究的未來鉤子的快速權宜之計:useNavigate。useNavigate 將提供一個更緊密地對齊的 API,并將解決一些直接在路由器中使用歷史 API 的長期問題(它可能看起來很像 @reach/router 的導航 API)。我們現在提供 useHistory 以盡可能輕松地遷移使用歷史 API 的現有代碼。
添加回答
舉報
