1. 程式人生 > >ReactJS & dva 專案常見報錯問題與解決方法 (react-router 4)

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. 專案中在頁面裡進行多層路由跳轉

  1. 在 主頁面 中進行元件的路由繫結
<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>

這裡寫圖片描述

  1. 應用

這裡寫圖片描述

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>