Ant Design 与 Ant Design Pro

1.ReactJS

1.1.分层

在这里插入图片描述
上图中,左侧是服务端代码的层次结构,由Controller,Service,Data Access三层组成服务服务端系统。

右侧是前端代码的结构,同样需要进行必要的分层:

  • Page负责与用户直接打交道:渲染页面,接受用户的操作输入,侧重于展示型交互性逻辑;
  • Model负责处理业务逻辑,为Page做数据,状态的读写,变化,暂存等;
  • Service负责与HTTP接口对接,进行纯粹的数据读写。

1.2.使用DVA进行数据分层管理

DVA是基于redux,redux-saga和react-router的轻量级前端框架,想要使用它,我们需要在config.js文件中进行配置:

export default {
   
    plugins: [
        ['umi-plugin-react',{
   
            dva:true //开启dva功能
        }]
    ]
};

接下来,创建model文件,约定在src/models文件夹中定义model

export default {
   
    //导出模型数据
    namespace: 'List',//通过namespace区分名称
    state: {
   
        dataList: [1, 2, 3],
        maxNum: 3
    },
    reducers: {
   
        //定义一些函数
        addNewData: function (state) {
   //这个state是更新之前的数据
            
            let maxNum = state.maxNum + 1;
            let newArr = [...state.dataList, maxNum];

            //通过return返回更新后的数据
            return {
   
                dataList: newArr,
                maxNum: maxNum
            }
        }
    }
}
import React from 'react';
import {
    connect } from 'dva';

const namespace = 'List';
//说明第一个回调函数,将page层和model层进行链接,返回model中的数据;
//并且,将返回的数据绑定到this.props中

// 接收第二个函数,这个函数的作用:将定义的函数绑定到this.props中,调用model层中定义的函数
@connect((state) => {
   
    return {
   
        dataList: state[namespace].dataList,
        maxNum: state[namespace].maxNum
    }
},

(dispatch)=>{
   
    //dispatch的作用可以调用model定义的函数
    return {
   
        add : function () {
   
            dispatch({
   //通过dispatch调用model中定义的函数,通过type属性,指定函数名
                type: namespace+"/addNewData"
            });
        }
    }
})
class List extends React.Component {
   

    constructor(props) {
   
        super(props);
    }

    render() {
   
        return (
            <div>
                <ul>
                    {
   
                        this.props.dataList.map((value, index) => {
   
                            return <li key={
   index}>{
   value}</li>
                        })
                    }
                </ul>
                <button onClick={
   () => {
   
                    this.props.add();
                }}>点我试试</button>
            </div>
        );
    }
}

export default List;

具体流程如下:
在这里插入图片描述

1.3.在model层中请求数据

首先在src下创建utils目录,并且创建request.js文件

// import fetch from 'dva/fetch';

function checkStatus(response) {
   
    if (response.status >= 200 && response.status < 300) {
   
        return response;
    }
    const error = new Error(response.statusText); error.response = response;
    throw error;

}

/**
* Requests a URL, returning a promise.	
* @param	{string} url The URL we want to request
* @param	{object} [options]	The options we want to pass to "fetch"
* @return   {object} An object containing either "data" or "err"
*/

export default async function request(url, options) {
   
    const response = await fetch(url, options); checkStatus(response);
    return await response.json();
}

在model中新增如下方法

import request from '../util/request';

export default {
   
    //导出模型数据
    namespace: 'List',//通过namespace区分名称
    state: {
   
        dataList: [],
        maxNum: 1
    },
    reducers: {
   
        //定义一些函数
        a
  • 9
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值