Webpack-dev-serverでパラメータ付きルーティングがうまく働かない時の対処

2020年03月02日 00時03分

前回の続きになります。

Webpack の dev-server で React の Routing を適応する

経緯

webpack の dev-server で React の Routing を設定する場合は、

devServer.historyApiFallback を true に設定する必要がありました。

それで直接 URL を入れるとうまくは行ったんですが…値付きパラメータを含んだリンクをブラウザの URL から直接リクエストした際には選択しても何も表示されない(null)という現象が起こっていました。

例)

Route path=”/products/:id” component={ProductPage} /

を設定して、ブラウザから root/products/有効な数値

を入力

解決策

1.webpack.config.js 内の output.publicPath の設定、

2.index.html 内のパスを root ディレクトリからの絶対パス表記に変更

対策

トップページから bundle.js を読み込ませる場合、ルートディレクトリからの絶対パス表記にしないと、うまく動いてくれない。

〇 <script src=”/bundle.js”></script>

× <script src=”bundle.js”></script>

Actually, if I change ./static/app.js to just /static/app.js it works. Not sure which form is correct. I’ve been using that period-prefixed form for years. D:

historyApiFallback doesn’t work, for scripts, if you’re nested multiple path sections deep

あとはルートディレクトリを webpack.config.js 上でも定義してあげる。

output: {
	path: path.resolve(__dirname, "dist"),
        filename: "bundle.js",
        publicPath:'/' //ここを追加
    },

URL のマッチングの兼ね合い?

webpack dec-server でも同じことをさせる devServer.historyApiFallback を true に設定する必要がありました。

とりあえず解決はしたのですが、Rouitng 時に相対パスが良くないっぽい。履歴に渡されたけど、解釈は絶対パスだから相対パスがずれてるのかなぁ…

また React Router は読んでいきたいと思います…