1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

react-routerでnavigateする時、stateはどこに保存されているの?

Posted at

結論

window.historyのstate

前提

react-routerはなんとなくで使えてしまうので、一応確認したという程度のメモ書きです。
react-router公式のメインコンセプトによると、HistoryはURLの変更をsubscribeできるようにするオブジェクトで、ブラウザのhistoryをプログラム的に操作するAPIも提供していると記載があります。

History - An object that allows React Router to subscribe to changes in the URL as well as providing APIs to manipulate the browser history stack programmatically.

また、LocationはWEB APIのwindow.locationを基にしているという記載もあります。

Location - This is a React Router specific object that is based on the built-in browser's window.location object. It represents "where the user is at". It's mostly an object representation of the URL but has a bit more to it than that.

このコンセプトを見る限り、ブラウザ標準APIを利用してURLの変更を検知→描画するDOMを変更するライブラリということが分かります。

実際にstateを渡して遷移してみる

メインコンセプトの時点で大方検討はついていますが、実際にconsole.log()で確認してみます。

stateを渡す起点となるページ
const MockPage2 = (props: Props) => {
    const navigate = useNavigate()
    const navigateWithState = () => navigate('/mock', {state: {id : 99}})
  return (
    <>
      <Typography>MockPage2</Typography>
      <Button onClick={navigateWithState}>react-routerでstateを渡して遷移</Button>
    </>
  )
}
stateを貰うページ
const MockPage = (props: Props) => {
    const location = useLocation()
    const state = location.state as {id : number}
    console.log(window.history)
    console.log(window.location)
  return (
    <>
      <Typography>MockPage</Typography>
      <Typography>{state.id}</Typography>
    </>
  )
}

遷移する前
image.png

遷移後
image.png

Window.locationには何も入っていない

window.historyのプロパティstateに保存されており、react-routerのuseLocationはwindow.historyのstateを便利に取得してくれているようです。
image.png

ちなみにsessionStorageやlocalStorageにも保存はされないです。
image.png

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?