React Routerでlocationを取得するサンプル
6849 ワード
概要
- とりあえず、window.location.pathname,searchを取得したい
- とりあえず
window.location.pathname
を記述しても取得は可能
- だが、きっとスマートな方法があるに違いないと思っている
- 2021年時点でのReact初学者
- 調べると、どうやらReactは歴史があり、時期によって推奨される記述方法やモジュールが変遷しているように感じている
- とりあえず
window.location.pathname
を記述しても取得は可能 - だが、きっとスマートな方法があるに違いないと思っている
(いつか古くなると思いつつ)一応取得できたので、メモしておこうと思います。
手順
実行環境
- Windows10 + WSL2 + Ubuntu 20.04 + Node.js 16
$ cat /etc/issue
Ubuntu 20.04.2 LTS \n \l
$ node --version
v16.5.0
準備
$ cat /etc/issue
Ubuntu 20.04.2 LTS \n \l
$ node --version
v16.5.0
Reactアプリケーション router-sample
を作成し、React Routerモジュールをインストールします
$ npm install -g create-react-app
$ npx create-react-app router-sample
$ cd router-sample
$ npm install react-router-dom
モジュール類のバージョン確認
$ npm list
[email protected] (snip)../router-sample
├── @testing-library/[email protected]
├── @testing-library/[email protected]
├── @testing-library/[email protected]
├── [email protected] extraneous
├── [email protected] extraneous
├── [email protected] extraneous
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
└── [email protected]
サンプルソース
src/App.js
import React from "react";
import {
BrowserRouter as Router,
Route,
useLocation
} from "react-router-dom";
export default function App() {
return (
<Router>
<Route>
<Sample />
</Route>
</Router>
);
}
function Sample() {
const {
pathname,
search
} = useLocation();
return (
<>
<p><a href="/test/link?a=1&b=2">test link1</a></p>
<p><a href="/go/?a=xyz">test link2</a></p>
<p>location.pathname:{pathname}</p>
<p>location.search:{search}</p>
<p>window.location.pathname:{window.location.pathname}</p>
<p>window.location.search:{window.location.search}</p>
</>
)
}
実行
$ npm start
Webブラウザで確認します
-
test link1
、test link2
それぞれをクリックして、pathname、searchの値が変化することを確認します
メモ
使える場所
<Router>
<Route>
で囲まれた部分で useLocation()
を使用できるようです。そうでない場合は下記のようなエラーが発生します。
useParams()
や useHistory()
も同様です。
TypeError: Cannot read property 'location' of undefined
本来の使い方?
<Route path="/funcname">
のように記述して、パスによって要素を切り替えて利用するのが本来かもしれません。
Author And Source
この問題について(React Routerでlocationを取得するサンプル), 我々は、より多くの情報をここで見つけました https://qiita.com/shinsaka/items/e928f0fc6cf15f7a4b66著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .