KAEDE Hack blog

JavaScript 中心に ライブラリなどの使い方を解説する技術ブログ。

React-Router-SPA-Netlify

Reactは最終的にbundle.jsに全てを襲爵するSingle Page App, SPAである

しかしRouteを使うことによってRequestが来た時に擬似的に複数ページを ユーザーに見せることができる.やってみる

why

職場のコーポレートサイト制作での複数ページ導入に.

code

$ npm install -S react-router-dom

www.djamware.com

参考にして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/にアクセスすると表示された!

f:id:kei_s_lifehack:20200514152050p:plain

しかし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になる

crieit.net

Netlifyがredirectを弾いてるのが原因らしい?

/static/_redirects に以下の内容を記載。

/* /index.html 200

なのでdefaultのauto-deployからcliでのdeployにする必要が出てくる

mottox2.com

npm でcli をinstall

netlify linkでcurrent github projectにset

そしてstatic/ にさっきの_redirect fileをさくせい

... しかしこれをやってもRouteはできなかった....

とにかくNetlifyの問題なのか,firebase hosting している2ch

projectの方で見てみよう

2chにappそのままでrouterを追加

f:id:kei_s_lifehack:20200515005739p:plain

npm run build , firebase deploy

f:id:kei_s_lifehack:20200515010526p:plain

f:id:kei_s_lifehack:20200515010538p:plain

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

exactにしたらいった!!!

f:id:kei_s_lifehack:20200515010805p:plain

firebase hostingでのrouting完了!!!!!ヨシ!!!!

神が教えてくださった.....

static/ ではなくbulid/に直接おいたらできた!!!!

docs.netlify.com

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があるとたふみさんから

教えていただいた.

gohugo.io

未検証.dataからhtmlを生成できるようだ.