umi+dva+antd+axios搭建項目,跨域代理問題


  項目背景:以前學過一些react,但是沒有實際寫過項目,只了解一些基礎的用法,這次正好空閑有時間將一個后台系統改寫為react的,來實際操作一下react。深感直接用react寫會很累,所以結合現代的流行的框架umi、dva、antd來寫。這樣寫起來也比較輕松,也有成就感。下面開始記錄項目搭建的一些過程。

  一、項目搭建:umi的官網上有說怎么新建一個項目,但是對於我這次的項目搭建不是很合適,於是采用的另一種搭建方式:

1.mkdir myapp && cd myapp

2.npm create umi

3.執行上一步之后,界面出現以下選擇

? Select the boilerplate type (Use arrow keys) ant-design-pro - Create project with an layout-only ant-design-pro boilerplate, use together with umi block. ❯ app - Create project with a simple boilerplate, support typescript. block - Create a umi block. library - Create a library with umi. plugin - Create a umi plugin.

4. ? Do you want to use typescript? (y/N)
5. ? What functionality do you want to enable? (Press <space> to select, <a> to toggle all, <i> to invert selection) ❯◯ antd ◯ dva ◯ code splitting ◯ dll
最后一步選擇antd和dva,選擇后生成了一個文件夾:create,然后進入這個文件夾,使用npm install安裝依賴
安裝完成之后,啟動項目:npm start。此時如果提示報錯,可能是umi-plugin-react沒有配置好,我重新安裝了最新的依賴:"@umijs/preset-react": "^1",然后再刪除了原有的.umirc.js配置文件,新建config文件夾,
在下面建立config.js文件,在里面配置:
 1 export default {
 2   base: '/',
 3   plugins: [
 4     ['umi-plugin-react', { // 主要是這個配置,我曾按照最新的方式直接配置 antd:{}和dva:{}結果還是報錯,這樣就不報錯了。
 5       antd: true,
 6       dva: {
 7         hmr: true
 8       },
 9       dynamicImport: {
10         webpackChunkName: false,
11         // loadingComponent: './components/PageLoading/index'
12       },
13       locale: {
14         enable: true, // default false
15         default: 'zh-CN', // default zh-CN
16         baseNavigator: true, // default true, when it is true, will use `navigator.language` overwrite default
17       }
18       // ...(!process.env.TEST && os.platform() === 'darwin'
19       //   ? {
20       //     dll: true,
21       //     hardSource: true,
22       //   }
23       //   : {}),
24     }],
25     // ['umi-plugin-ecma5-validator', {}],
26   ]
27 }

這一系列配置完成之后,啟動項目就看到默認的啟動頁了。

二、dva的使用

  dva官方介紹:dva 首先是一個基於 redux 和 redux-saga 的數據流方案,然后為了簡化開發體驗,dva 還額外內置了 react-router 和 fetch,所以也可以理解為一個輕量級的應用框架。在umi中使用dva很簡單,在安裝了dva之后,在src目錄下直接新建models文件夾,下面新建app.js,這個文件則是全局的可以在里面配置全局的一些方法。具體看官網和自己的實際需求。然后單獨的每個頁面的model則可以直接配置在單獨的文件夾下,如login文件夾下有:index.js、index.less、model.js,這樣在index.js里直接引入dva的connect,不必引入model,框架會自動識別到,然后再導出組件的時候掛載,如下所示:

export default connect(({ login }) => ({ login }))(Login)

這樣在組件里的props里就可以拿到我們管理的數據了。model.js里的具體寫法參看官網。

三、antd的使用,在安裝之后,進行了第一步里的配置之后,則在各個組件里直接引入就可以了,推薦按需引入,如下:

import { Form, Input, Button, Divider, Icon } from 'antd';

四、axios使用和跨域相關問題

終於進入到今天的關鍵問題了,網上搜了好多關於react里使用axios解決跨域的問題,基本都是說兩種方案:

1.在package.json里配置proxy,以對象的方式,記得加雙引號。並說明這種方式只適合一個代理的接口。

2.使用http-proxy-middleware,首先安裝這個插件,然后在src下面新建setupProxy.js文件,里面配置內容就不多說了,網上一搜一大把。

然而這兩種方式我用了都沒有任何效果,我覺得是因為我在umi里用的原因,然后突然看到一位小伙伴是在.umirc.js文件下直接配置的proxy,於是我在我的config.js里做了proxy代理,然后點擊登錄,我的天,簡直了,直接就代理成功了,哈哈哈,終於成功了,沒想到umi的配置這么簡單,我突然很想說一句:umi真香啊!

當然,以上的這些經驗主要是由於我沒有深入理解這些框架導致的,如果大家比較熟悉這些框架可能不會出現這些問題。總而言之,言而總之,終於可以正常開發了,接下來就是權限方面的難題了。后面再更新。。。


免責聲明!

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



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