dva與create-react-app的結合使用


  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');
View Code

然后建立一個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
View Code

為什么使用這個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 }
View Code

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;
View Code

然后此時我們就可以放心大膽的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 }
View Code

注意package.json  不能再有babelrc這個字段了  不然會報錯  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM