Closed futuremaze closed 3 years ago
プロジェクトディレクトリをreact_router
ではなく誤ってreact-router
にしたところ、
npm install の段階でエラーが発生した
インストールするreact-routerパッケージと名前が同じであることが原因と思われるため、ディレクトリ名をreact_router
に修正した。
ディレクトリ変更後はpackage.json
ファイル修正のためnpm init -y
からやり直す必要があった。
codespace@codespaces_9c80b9:/workspaces/getting_started_with_react/react-router$ npm install --save-dev @babel/core @babel/preset-env @babel/preset-react babel-loader \
> webpack webpack-cli webpack-dev-server \
> react react-dom \
> react-router react-router-dom
npm ERR! code ENOSELF
npm ERR! Refusing to install package with name "react-router" under a package
npm ERR! also called "react-router". Did you name your project the same
npm ERR! as the dependency you're installing?
npm ERR!
npm ERR! For more information, see:
npm ERR! <https://docs.npmjs.com/cli/install#limitations-of-npms-install-algorithm>
npm ERR! A complete log of this run can be found in:
npm ERR! /home/codespace/.npm/_logs/2021-03-31T07_13_33_032Z-debug.log
<Route exact path="/" ...></Route>
: /
のみマッチし、/foo
や/bar
にはマッチしない<Route exact path="/" ...></Route>
: /
も/foo
も/bar
もすべてマッチするhttps://qiita.com/taro_kawasaki/items/767dbe84b7eb58111eb3
Layout.jsのimport { Link } from "react-router-dom";
で、importするLinkに波括弧{}がついているのはなぜか。
Reactで{}(curly bracket or 中括弧 or 波括弧)をimportで使う理由
以下が結論。 Named Exportというのは、exportにdefaultがついていないもののこと。
ES6のexportには
Default Export Named Export の2種類が有り、Named Exportには{ } を付けないとimportできない。
に追加して
ファイルからオブジェクト全体をimport ファイルから特定のオブジェクトをimport の2種類が有り、特定のオブジェクトをimportする際は{ }をつける。
client.js
で<Route path="/archives/:article" component={Archives}></Route>
のように:パラメータ名
と指定する。
コンポーネント内でthis.props.match.params.article
のようにthis.props.match.params.パラメータ名
で値を取得できる。
client.js
に<Route path="/settings/:mode(main|extra)" component={Settings}></Route>
のように:パラメータ名
のあとに正規表現を記載する。
コンポーネント内での参照はURLパラメータと同じでthis.props.match.params.パラメータ名
のようにする。
NavLinkタグにclass
属性を指定するとエラーになる。
react-dom.development.js:67 Warning: Invalid DOM property `class`. Did you mean `className`?
at a
at LinkAnchor (webpack:///../node_modules/react-router-dom/esm/react-router-dom.js?:158:23)
at Link (webpack:///../node_modules/react-router-dom/esm/react-router-dom.js?:206:31)
at NavLink (webpack:///../node_modules/react-router-dom/esm/react-router-dom.js?:279:30)
at div
at Layout (webpack:///./js/pages/Layout.js?:39:5)
at withRouter(Layout) (webpack:///../node_modules/react-router/esm/react-router.js?:725:37)
at Router (webpack:///../node_modules/react-router/esm/react-router.js?:93:30)
at BrowserRouter (webpack:///../node_modules/react-router-dom/esm/react-router-dom.js?:59:35)
class
をclassName
とすると正常になる。
ポイントのみにしぼったコードと解説のため、その他のコードはgithubを直接参照する必要がある。
https://github.com/TsutomuNakamura/my-react-js-tutorials/tree/master/2-react-router
今から始めるReact入門 〜 React Router 編 https://qiita.com/TsutomuNakamura/items/34a7339a05bb5fd697f2