【Ant Design Pro】基本配置和工作流程


一、常用的幾個目錄:

config :配置文件
   
  config.js :路由定義文件&&代理路徑文件
     
defaultSettings.js :主題顏色以及標題配置文件
   
 plugin.config.js :沒怎么用過的配置文件 

mock:mock數據文件,用於本地開發使用

public:靜態圖片資源

src :開發項目文件(主要在此目錄下進行發)

   assets :存放平台logo
   components :全局組件文件夾
   layouts :全局布局文件
   locales:國際化文件
   models :數據倉庫,每個文件都需要一個命名空間 ,定義全局請求函數
   pages:頁面文件
   service : 全局service 發起請求文件
   utils :工具文件 其中會有自定義request.js

平時主要用4個文件:mock、page、models、services

 

二、module內容具體分析

在model中存在 namespace(命名空間,用來區分不同的頁面之間的數據),state(該命名空間下的數據),effects(一些異步請求的api方法定義在這里),reducers(用來修改state的一些函數定義在reducers下)

文件包含以下幾個模塊(實際上都是javascript對象):

state => 數據構成

effects => 處理異步action,采用generator的相關概念,將異步轉化成同步寫法。

reducers => 處理同步action,相當於redux中的reducer函數,純函數(即相同的輸入得到相同的輸出)

 

routes 業務組件,通常是需要連接數據倉庫的組件。我們通過connect連接數據倉庫之后可以通過this.props獲取到數據和dispatch方法,並使用dispatch派發action來達到更新state(即更新數據倉庫)的操作。

components 通用組件(純組件),通常是一些復用性很強的組件,不需要連接數據倉庫。通過props傳遞數據,父組件傳遞相同的props,會渲染相同的頁面。不做任何業務上的處理。

services 所有的請求都寫在這里,官方已經為我們封裝了request方法,我們只需要傳入參數即可

 

三、整體的一個運行流程如下:

進入頁面,在頁面的componentDidMount鈎子函數中調用modeleffect中的方法,該方法調用service文件夾下的統一管理的請求函數。

獲取到服務器返回值,在modeleffect中拿到,並且調用model下的reducer,調用modelreducers對請求的數據進行處理,將modelstate進行改變,頁面自動進行渲染。

 

四、在工作中的例子

mock(一開始使用假數據模式)

 1 let list = [],//所有數據
 2      id = 123;
 3 
 4 //初始化
 5 for(let i =1,i<21;i++){
 6    const item = {
 7        appId:"T"+(100+i),
 8        appName:`應用${i}`,
 9        status:(i % 3).toString()
10    };
11    list.unshift(item);
12 }
13 const OK = {
14    domain:null,
15    type:"s",
16    code:"AAAAA"
17 };
18 const createApplication = (req,res) =>{
19     const newData = {...req.body.tAtpApplication,appId:"T" +id++};
20     list.unshift(newData);
21     res.json:{
22        reply:{
23           returnCode:ok,
24           tAtpApplication:newData
25        }
26     });
27 }
28 const deleteApplication = (req,res) =>{
29     list.forEach((item,index)=>{
30       if(item.appId == req.body.appId){
31          list.splice(index,1)
32       }
33     });
34     res.json:{
35        reply:{
36           returnCode:ok,
37           tAtpApplication:req.body
38        }
39     });
40 }
41 .
42 .
43 .
44 export default {
45    "POST /api/queryApplicationList" :queryApplicationList,
46    "POST /api/createApplicationList" :createApplicationList,
47    "POST /api/deleteApplicationList" :deleteApplicationList,
48 }

module

 1 import{
 2   queryApplicationList,
 3   createApplication,
 4   deleteApplication
 5 } form "@/services/autotest/application";
 6 
 7 export default {
 8   namespace:"autotestApplication",
 9   state:{
10     data:{}
11   }
12 }
13 
14 effects:{
15   *queryApplicationList({payload,callback},{call,put}){
16     const response = yieId call (queryApplicationList,payload);
17     if (response.returnCode.type ==="s"){
18        yieId put({
19            type:"save",
20            data:response.tAtpApplication,
21           //data:response
22     });
23    if (callback) callback();
24 }
25 .
26 .
27 .
28 reducers:{
29   save(state,action){
30      return {...state,data:action.data || {} };
31 },
32 }

service

 1 import request from "@/utils/request";
 2 
 3 export async function queryApplicationList(payload){
 4    return request("/api/queryApplicationList",{
 5        method:"POST",
 6        data:payload
 7   }):
 8 }
 9 export async function createApplicationList(payload){
10    return request("/api/createApplicationList",{
11        method:"POST",
12        data:payload
13   }):
14 }
15 export async function deleteApplicationList(payload){
16    return request("/api/deleteApplicationList",{
17        method:"POST",
18        data:payload
19   }):
20 }

 pages

 1 ...略
 2 @connect (({autotestApplication}) =>({
 3    data:autotestApplication.data
 4 }))
 5 class Application extends Component {
 6    constructor (props){
 7       super(props);
 8       this.state = {
 9         data:[]
10       }
11    }
12 }
13 
14 componentDidMount(){
15   this.queryAppList(this.state.param);
16 }
17 
18 //刪除應用
19 handleDelete = key =>{
20    const {dispatch} = this.props;
21    dispatch({
22        type:"autotestApplication/deleteApplication",
23        payload:{appId:key},
24        callback:()=>{
25    }
26    this.queryAppList
27 }

 

 

 

 


免責聲明!

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



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