ReactJS & dva 專案常見報錯問題與解決方法 (react-router 4)
1. 專案中用 dva-cli 生成路由:
命令列:$ dva g route users
報錯資訊:
AssertionError [ERR_ASSERTION]: getRouterTree: component should be one of Router, Route, Redirect, IndexRedirect, IndexRoute
at parse (C:\Users\Administrator\AppData\Roaming\npm\node_modules\dva-cli\node_modules\dva-ast\lib\collections \Router.js:57:28)
at ret.children.node.children.filter.map.node (C:\Users\Administrator\AppData\Roaming\npm\node_modules\dva-cli\node_modules\dva-ast\lib\coll
ections\Router.js:94:93)
at Array.map (<anonymous>)
at parse (C:\Users\Administrator\AppData\Roaming\npm\node_modules\dva-cli\node _modules\dva-ast\lib\collections\Router.js:94:81)
at NodePath.simpleMap.path (C:\Users\Administrator\AppData\Roaming\npm\node_modules\dva-cli\node_modules\dva-ast\lib\collections\Router.js:1
17:13)
at NodePath.<anonymous> (C:\Users\Administrator\AppData\Roaming\npm\node_modules\dva-cli\node _modules\dva-ast\lib\collections\Helper.js:21:2
8)
at __paths.forEach (C:\Users\Administrator\AppData\Roaming\npm\node_modules\dva-cli\node_modules\jscodeshift\src\Collection.js:76:36)
at Array.forEach (<anonymous>)
at Collection.forEach (C:\Users\Administrator\AppData\Roaming\npm\node_modules\dva-cli\node_modules\jscodeshift\src\Collection.js:75:18)
at Collection.simpleMap (C:\Users\Administrator\AppData\Roaming\npm\node_modules\dva-cli\node_modules\dva-ast\lib\collections\Helper.js:20:1
解決方法: 這個時候專案其實已經生成了新的users路由。把router.js裡自動生成的users放進switch標籤中。
<Router history={history}>
<Switch>
<Route path="/" exact component={IndexPage} />
<Route path="/users" component={Users} />
</Switch>
</Router>
2. 專案裡在 js 函式中進行路由跳轉
1. 在router.js中進行元件的路由繫結
2. 在js檔案中的函式中進行跳轉(以路由為 ' /user ' 為例),在js中新增:
this.props.history.push('/users');
瀏覽器中 :
3. 專案中在頁面裡進行多層路由跳轉
- 在 主頁面 中進行元件的路由繫結
<Route path="/admin/AllHome"
render={() =>
<div>
<Switch>
<Route path="/admin/AllHome/AllHomeAdd" component={AllHomeAdd}></Route>
<Route path="/admin/AllHome" component={AllHome}></Route>
</Switch>
</div>
}
>
</Route>
- 應用
4.antdPro專案打包之後,因為程式碼分割所以打包成多個0.async.js 這樣的js檔案,解決程式碼分割後js的檔案路徑問題
解決方法:打包後的專案中,找到index.*.js檔案,檔案中搜索“src”關鍵字,加“./”
5. 解決Menu選單和頁面地址同步問題
問題描述 : 模組熱載入或者瀏覽器強制重新整理後,頁面更新後選單欄的啟用列和地址和展示內容往往不同步。
menu的主頁面中:
//點選導航,menu selected變色
SelectMenu = () =>{
var path = window.location.href.split('#')[1];
this.setState({
selectedKeys:path
})
}
<Menu
mode="horizontal"
selectedKeys = {[this.state.selectedKeys]}
onClick = {this.SelectMenu()}
>
{this.getNavMenuItems(this.menus)}
</Menu>
6. 解決路由跳轉,頁面資料無法實時重新整理問題
問題描述:
“/Sale/UpdateRent” 路由頁面中修改了部分資訊,重新跳轉回“/Sale”頁面時,頁面中的資料並沒有實時更新。
問題解決:在“/Sale”頁面中 首次請求介面操作放在 componentWillReceiveProps中。
7. react+dva+roadhog 專案打包是出現記憶體溢位的問題
問題描述:
npm run build 之後出現報錯 “FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory”
問題解決:
1、找到專案中 node_modules 包中的 ./bin/roadhog.cmd檔案加上 “ –max_old_space_size=8192 ”
2、重新打包 npm run build就可以看到打包成功
8. npm run start 啟動專案後,瀏覽器沒有正常顯示頁面,而是顯示專案的目錄結構
問題描述:
問題解決:
webpack的出口路徑配置問題。
publicPath: '/',
9. npm run start 啟動專案後,控制檯報錯
問題描述:
Module build failed: TypeError: Property right of AssignmentExpression expected node to be of a type [“Expression”] but instead got null at Array.map (native)
問題解決:
由於 babel@7 升級導致的 break change,transform-decorators-legacy 無需引入了。
10. 頁面中直接嵌入html
問題解決:
<p dangerouslySetInnerHTML={{ __html: this.state.pdfhtml}}></p>