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を生成できるようだ.