問題的產生
今天下午請假,忙完手頭事之后,在家實在無聊,想着從0開始搭建一個 react 的項目。webpack 基本配置之前研究過,沒什么大問題。誰想,在 react-router 的配置時出現了個大坑。
router 版本采用最新的5版本。官網提供 browserrouter 和 hashrouter 兩種方式,為了項目的鏈接 url 好看,我選擇了第一種。
本地用 webpack 開發 react,當然 少不了 devserver,devserver提供一個靜態資源訪問服務。相當於在開發階段給你配置了一個服務器。所以,問題油然而生,router 中的路由其實本身訪問的應該是 router 中所配置的頁面組件,但是實際上訪問 的時 devserve 所提供的靜態資源,所以url 中的 path 映射到文件夾下,肯定是404,找不到文件。沒想到啊,本地開發居然有這種問題,虧我是有接近兩年工作經驗的前端,慚愧,不玩了,多學習,羞羞。
browserHistory 使用的是 H5 的 history api,js 通過 history.push 或者 history.replace 處理跳轉,頁面鏈接只是被 replace 掉,並沒有刷新頁面,因此速度快,展示效果好。
解決方案
通過查看 devserver 文檔,發現有配置項
按照官方文檔處理后,果然有效。重啟服務后,不存在的文件的 pathname 被 fallback 了。
至此,我的問題就解決了。
查看官網配置,發現也可以傳遞一個對象,來進行精准匹配,前提是多入口打包的話。
問題延伸
同理,當我開發完成,把打包壓縮后的文件放置到服務器上時,訪問單頁路由鏈接時,依然會有此問題。
在此階段的我,對於服務器還是一個小白,只能稍談一些解決方案
- 后端服務針對前端路由做映射。