dva與我們的create-react-app創建的兩款腳手架是我們寫react項目的兩款優秀框架,之前一種使用create-react-app這款腳手架進行開發。然后這個框架美中不足的是redux方面着實令人書寫麻煩 然而dva框架就對其進行了封裝改良 使其看起來vuex相似度十分高 下面給大家介紹下用這兩個框架結合起來開發的步驟吧
首先利用create-react-app生成一個腳手架 然后下載一個dva和history包
接着把腳手架生成的src全部刪掉 用我們自己的項目目錄進行開發
首先 建立一個index.js文件夾 作為我們項目的主入口

1 import dva from "dva"; 2 import App from "./App" 3 4 //注意這種引入方式已經報銷 在控制台會報警告 5 // import createHistory from 'history/createBrowserHistory'; 6 7 //這種為history路由展示方式 8 //const createHistory=require("history").createBrowserHistory 9 10 //這種為hash路由展示方式 11 const createHistory=require("history").createHashHistory 12 13 //下面是兩種注入方式 14 const app = dva({ 15 history: createHistory(), 16 }); 17 18 //const app=dva(createHistory); 19 20 app.router(App) 21 22 app.start('#root');
然后建立一個App.jsx作為我們項目路由的主出口文件

1 import React,{Suspense} from 'react' 2 3 import {Router} from "dva/router" 4 5 import RouteView from "./routes/RouteView" 6 import RouteConfig from "./routes/RouteConfig" 7 8 //注意這里一定要注入history不然頁面展示不出來 而且是結構出來的history 9 function App({history}){ 10 return <Router history={history}> 11 <Suspense fallback={<div>loading...</div>}> 12 <RouteView children={RouteConfig}></RouteView> 13 </Suspense> 14 15 </Router> 16 } 17 18 export default App
為什么使用這個App.jsx呢?
---原因當然是想使用路由表了 為了讓其與vue項目相似度更高些哈哈 下面展示下個人封裝的兩個路由表
RouteView

1 import React, { Component } from 'react' 2 3 import {Switch,Redirect,Route} from "dva/router" 4 5 export default class RouteView extends Component { 6 render() { 7 return ( 8 <Switch> 9 {this.props.children.map((item,index)=>{ 10 if(item.redirect){ 11 return <Redirect key={index} from={item.path} to={item.redirect}></Redirect> 12 }else{ 13 return <Route key={index} path={item.path} render={(props)=>{ 14 return <item.component children={item.children} {...props}></item.component> 15 }}></Route> 16 } 17 })} 18 </Switch> 19 ) 20 } 21 }
RouteConfig

1 /* 2 * @Author: chenqiang 3 * @Date: 2019-08-16 10:59:42 4 * @Last Modified by: chenqiang 5 * @Last Modified time: 2019-08-17 20:19:41 6 * 路由配置表 7 */ 8 import React from "react"; 9 const RouteConfig=[ 10 { 11 path:"/main", 12 component:React.lazy(()=>import("@/views/main/index.jsx")), 13 children:[ 14 { 15 path:"/main/home", 16 component:React.lazy(()=>import("@/views/main/home/index.jsx")) 17 },{ 18 path:"/main", 19 redirect: "/main/home" 20 } 21 ] 22 }, { 23 path:"/login", 24 component:React.lazy(()=>import("@/views/login/index.jsx")) 25 },{ 26 path:"/register", 27 component:React.lazy(()=>import("@/views/register/index.jsx")) 28 },{ 29 path:"/", 30 redirect:"/main" 31 } 32 ] 33 34 export default RouteConfig;
然后此時我們就可以放心大膽的yarn start運行我們的項目了
很令人無語的是控制台爆出了這么一個警告 雖然不影響我們的代碼執行,但是有強迫症的人來說看見這篇警告總是非常不爽的一件事
於是就各種查閱資料進行取消這個警告
先說下這個警告的意思吧 說第一種引入的方式已被廢除讓我們用下面哪種引入方式進行引入 然后是不是很神奇呢 ,我明明沒有這樣
引入過為什么給我報出來了呢??? 答案在下面===>
打開我們的node_modulex 找到我們dva包 打開下面這個文件
然后在里面就會有哪種方式的引入 將其更改掉就好了
美中不足的是每次重新下包就會給你自動改回去~~~
剩下的就可以放心大膽的擼代碼了 然后下面在貼一個antd的按需加載
建造一個.babelrc文件 內容如下

1 { 2 "presets": [ 3 "react-app" 4 ], 5 "plugins": [ 6 [ 7 "import", 8 { 9 "libraryName": "antd", 10 "libraryDirectory": "es", 11 "style": "css" // `style: true` 會加載 less 文件 12 } 13 ] 14 ] 15 }
注意package.json 不能再有babelrc這個字段了 不然會報錯