天天看點

react history模式下的白屏問題

近期,再用react的時候,由于不想用醜陋的hash,便将路由模式切換成history了,結果帶來了一些問題,比如重新整理白屏,還有圖檔加載不出來,這裡我們說一下解決方案。

原因

首先,我們說一下造成這一系列現象的原因。

我們在http://localhost:xxxx/這個路徑下去重新整理頁面是沒有問題的,一切都顯得那麼正常,但是當我們換到一個子子產品,重新整理就會白屏,為什麼呢?

react history模式下的白屏問題

我們看到,它會從目前路徑下去找bundle.js,為什麼?因為HtmlWebpackPlugin插件在幫我們引入bundle.js時,引入的是相對路徑

react history模式下的白屏問題

是以,在重新整理時,它是相對于現在的url取尋找的。

解決方案

原因一旦清楚,解決方案便呼之欲出了。我們隻要想辦法讓bundle.js的加載路徑在重新整理的時候,也從根目錄開始尋找,而不是跟随目前url即可。

1.output配置加入publicPath
output: {
    filename: 'assets/js/bundle.js',
    path: path.resolve(__dirname, 'dist'),
    publicPath: "/"
}           

publicPath是什麼意思呢?官網中有這麼一句話

webpack-dev-server 也會預設從 publicPath 為基準,使用它來決定在哪個目錄下啟用服務,來通路 webpack 輸出的檔案。           

簡單了解,你的靜态資源,都會從此路徑下開始加載

publicPath: "/"     //加載路徑‘/assets/js/bundle.js’           

這樣,每次重新整理都會從根目錄開始加載,就不會丢失我們的bundle.js了。圖檔加載不出來也是這個問題。

2.webpack-dev-server的historyApiFallback

history模式下,devServer需要配置historyApiFallback為true

devServer: {
historyApiFallback: true
}           

注意以上兩點,history模式就能正常使用了。如果還有其他原因,歡迎大家補充。

ps:項目部署上伺服器後,頁面白屏,需要背景進行相關設定,這裡不做讨論。

繼續閱讀