React-Router-SPA-Netlify
Reactは最終的にbundle.jsに全てを襲爵するSingle Page App, SPAである
しかしRouteを使うことによってRequestが来た時に擬似的に複数ページを ユーザーに見せることができる.やってみる
why
職場のコーポレートサイト制作での複数ページ導入に.
code
$ npm install -S react-router-dom
参考にしてindex.jsで
import { BrowserRouter as Router, Route, Switch, } from 'react-router-dom';
import App from './App';
import Works from './components/Works';
.........
ReactDOM.render(
<Router>
<div>
<Route exact path='/' component={App} />
<Route path='/works' component={Works} />
</div>
</Router>,
document.getElementById('root')
);
を埋め込む
そしてWorksを作成し,一部書き換え
<Col className='py-3 bg-secondary'
xs={9} >
電球,蛍光灯,電池交換,テレビ,エアコン,
</Col>
urlで /works/にアクセスすると表示された!

しかしdeployしたnetlifyではダメだった
tried
とりあえずマッチしなければAppに返すようにSwitchで挟む
そういうわけにはいかない,exactにしてみた.効果はない
大文字にした,効果はない
componentでそのまま渡してるんだから,src/components/Works
からAppと並列のsrc/Worksにする
<Route exact path='/App' component={App} />
これを追加して,deploy先でRouterが読まれているかのテストとする
動いていない
[https://reacttraining.com/react-router/web/guides/quick-start:embed:cite]
この例を見るとRouteの中にComponentを入れているので こっちらで試してみる
<Switch>
<Route path="/about">
<About />
</Route>
<Route path="/users">
<Users />
</Route>
<Route path="/">
<Home />
</Route>
</Switch>
このやり方ではErrorになったのでぼつ
https://codeburst.io/getting-started-with-react-router-5c978f70df91codeburst.io
このページのやり方
<Router>
<div>
<Route exact path="/" component={App} />
<Route path="/users" component={Users} />
<Route path="/contact" component={Contact} />
</div>
</Router>
https://codeburst.io/getting-started-with-react-router-5c978f70df91
もerrorになる
Netlifyがredirectを弾いてるのが原因らしい?
/static/_redirects に以下の内容を記載。
/* /index.html 200
なのでdefaultのauto-deployからcliでのdeployにする必要が出てくる
npm でcli をinstall
netlify linkでcurrent github projectにset
そしてstatic/ にさっきの_redirect fileをさくせい
... しかしこれをやってもRouteはできなかった....
とにかくNetlifyの問題なのか,firebase hosting している2chの
projectの方で見てみよう
2chにappそのままでrouterを追加

npm run build , firebase deploy


ダメだった,defaultのpageにredirectされてしまう...
exactにしたらいった!!!

firebase hostingでのrouting完了!!!!!ヨシ!!!!
いろいろ調べたところ、netlify のデフォルトの設定だと、/build の直下に _redirect ファイルを置くべきでした。
— りょう@WEB エンジニア (@ryocoding) May 14, 2020
神が教えてくださった.....
static/ ではなくbulid/に直接おいたらできた!!!!
netlify public document にあったそうだ,そうかhostのredirectのページか....
なのでNetlifyでReact-routerを使う場合は
npm install netlify-cli -g
npm run build
cp _redirect builld/
netlify deploy
をする必要がある.
Hugo
Hogeの仲間の無意味語ではない!
そもそもSPAではrouteをする手間がかかる.
しかしhtml cssだけでかくと変更があったときに全身から血が吹き出して死ぬ.
それを防ぐための静的ジェネレーターにHugoがあるとたふみさんから
教えていただいた.
未検証.dataからhtmlを生成できるようだ.