簡體   English   中英

當用戶在 history.push() 之后按下“返回”按鈕時,我們可以刷新頁面嗎

[英]Can we refresh a page when a user presses "go back" button after history.push()

在我的反應應用程序中,我有一個按鈕可以用history.push()玩游戲

const handle = () => {
    history.push("/game");
    setPlayer({...player, inLobby: false, inGame: true});
};

<button onClick={handle}>
    Play !
</button>

在游戲中,我有一個提示,當他按下返回刷新按鈕時警告用戶。

<Route path="/lobby">
    {player.inLobby ? <Lobby/> : <Redirect to="/"/> }
</Route>
<Route path="/game">
    {player.inGame ? <Play/> : <Redirect to="/"/>}
</Route>

當用戶刷新頁面時,沒有問題,他用刷新的頁面返回"/"
但是當用戶按下返回按鈕時,他返回到"/"並且頁面沒有刷新。
如何強制刷新頁面?

您可以使inGameinLobby無效,以便Router執行其邏輯或使用 vanilla javascript location.href = '/'但這將導致丟失活動狀態。

您沒有在handle功能中正確更新您的播放器。

快速解決

const handle = () => {
  setPlayer(prevState => (
   {...prevState, inLobby: false, inGame: true}
  ))
  history.push("/game")
}

解釋

不要使用當前狀態值player來設置setPlayer 使用最佳實踐方法通過prevState更新您的狀態。

在您的情況下,您需要設置狀態,然后在setState之后推送到另一個頁面,因此使用 a ,將在setState之后調用history.push

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM