IT

AmplifyでReact Routerが上手くいかない時に・・・

AmplifyはSPAのホスティングがメインかと思いますが、複数のページのホスティング&ルーティングすることができます。

React Routerの設定/CLI操作からだけだと実現できずAWSのコンソール操作が必要になります。

やること

全てのリクエストが/index.html にリダイレクト(リライト)してあげるようにする。

reactはsrc/App.jsで解釈したものをpublic/index.html にレンダリングするので、この設定が必要になります。

これによって、Reactアプリはサーバー側で個別のページを持たずに、すべてのルーティングをクライアントサイドで処理できるようになります。

サンプルコード

・Reactのコード(App.js)

import React from 'react';
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
import Home from './Home';
import Go from './Go';

function App() {
  return (
    <Router>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/go" element={<Go />} />
      </Routes>
    </Router>
  );
}

export default App;

index.htmlは基本的にそのままで問題ありません。

Amplifyコンソールで設定する値

アプリ設定 > 書き換えとリダイレクト にて以下のJsonを追加し保存 

[ { "source": "</^[^.]+$|\\.(?!(css|gif|ico|jpg|jpeg|js|png|txt|svg|woff|ttf|map|json|xml)$)([^.]+$)/>", "target": "/index.html", "status": "200" } ]

リダイレクトを使用する>単一ページのウェブアプリケーション (SPA) のリダイレクト

コンソールで設定するだけで、追加でデプロイは必要ありません。

上記にて、React Routerにて指定したファイルにアクセスできます。

  • {Amplifyから生成されたURL}

=>Homeのコンポーネントが表示

  • {Amplifyから生成されたURL}/go

=>Goのコンポーネントが表示

最後に

Amplifyは便利ですが、ドキュメントが開発とユーザーガイドに分割されているので、必要な情報がどこにあるか分かりづらいですね。

  • https://docs.aws.amazon.com/ja_jp/amplify
  • https://docs.amplify.aws

以上、どなたかのお役に立てば幸いです。

  • この記事を書いた人

緑川縁

ニートからシステムエンジニアになった人
クラウド案件をメインにやっています。
保持資格:CCNA,AWS SAA&SAP,秘書検定2級
趣味でボカロ曲作り始めました。

-IT
-,