一、概述


  以列表页中的标准列表为主

  

  Ant Design Pro 默认通过只需浏览器单方面就可处理的 HashHistory 来完成路由。如果要切换为 BrowserHistory,那在 src/index.js 中也有对应的内容可以直接修改,但需要在后端服务器进行相应路由配置。

二、详述


加载过程图

2.1、菜单→路由→组件

  在左侧的导航栏点击 列表页 > 标准列表 后,可以进入到上面截图所示的页面。导航栏的内容在 src/common/menu.js 中【或者服务获取的地址】

菜单:

{name: '列表页',icon: 'table',path: 'list',children: [{name: '查询表格',path: 'table-list',},{name: '标准列表',path: 'basic-list',},//……   ],},

路由

  全局的路由关系是:src/index.js 中通过 app.router(require('./router').default);,将 src/router.js 绑定到 dva 实例的 router 方法上。而在 src/router.js 中又引入了 src/common/router.js 中的 getRouterData 作为数据源。

  其实就是相当于:src/common/menu.js 中 path 所指向的路径对应于 src/common/router.js 中的路由记录。

export const getRouterData = (app) => {const routerConfig = {...,'/list/basic-list': {component: dynamicWrapper(app, ['list'], () => import('../routes/List/BasicList')),},...,};...
}

  这里调用了同文件内的 lazy-loading 的动态加载函数 dynamicWrapper,有 3 个参数,app 为全局 dva 实例,models 为一个带有相关 dva Model 的 Array,component 即为该路由记录对应的实际组件。

const dynamicWrapper = (app, models, component) => {...};

    可以看到:

    1、加载路由的时候,会动态加载当前文件下的model文件,也就是对应文件下的src/models/list.js

组件:

  src/routes/List/BasicList.js,具体组件。已省略部分代码

import React, { PureComponent } from 'react';
import { connect } from 'dva';
//……
import PageHeaderLayout from '../../layouts/PageHeaderLayout';@connect(({ list, loading }) => ({list,loading: loading.models.list,
}))
export default class BasicList extends PureComponent {componentDidMount() {this.props.dispatch({type: 'list/fetch',payload: {count: 5,},});}render() {return (<PageHeaderLayout>{/* 页面内容…… */}</PageHeaderLayout>);}
}

2.2、@connect 装饰器

  组件写法中调用了 dva 所封装的 react-redux 的 @connect 装饰器,用来接收绑定的 list 这个 model 对应的 redux store。注意到这里的装饰器实际除了 app.state.list 以外还实际接收 app.state.loading 作为参数,这个 loading 的来源是 src/index.js 中调用的 dva-loading这个插件。

/*
* src/index.js
*/
import createLoading from 'dva-loading';
app.use(createLoading());

它返回的信息包含了 global、model 和 effect 的异步加载完成情况。

数据map一

{"global": true,"models": {"list": false,"user": true,"rule": false},"effects": {"list/fetch": false,"user/fetchCurrent": true,"rule/fetch": false}
}

注意到在这里带上 {count: 5} 这个 payload 向 store 进行了一个类型为 list/fetch 的 dispatch,在 src/models/list.js 中就可以找到具体的对应操作。

import { queryFakeList } from '../services/api';export default {namespace: 'list',state: {list: [],},effects: {*fetch({ payload }, { call, put }) {const response = yield call(queryFakeList, payload);yield put({type: 'queryList',payload: Array.isArray(response) ? response : [],});},/* ... */},reducers: {queryList(state, action) {return {...state,list: action.payload,};},/* ... */},
};

View中使用

1、connect使用

@connect(({ list, loading }) => ({list,//①loading: loading.models.list,//②
}))

  说明:

1、connect 有两个参数,mapStateToProps以及mapDispatchToProps,一个将状态绑定到组件的props一个将方法绑定到组件的props

2、代码①:将实体list中的state数据绑定到props,注意绑定的是实体list整体,使用时需要list.[state中的具体变量]

3、代码②:通过loading将上文“数据map一”中的models的list的key对应的value读取出来。赋值给loading,以方便使用,如表格是否有加载图标

 当然代码②也可以通过key value编写:loading.effects["list/fetch"]

2、变量获取

因,在src/models/list.js

export default {namespace: 'list',state: {list: [],},

故在view中使用

  render() {const { list: { list }, loading } = this.props;

说明:

  定义使用时:list: { list }  ,含义实体list下的state类型的list变量

ant design pro 页面加载原理及过程,@connect 装饰器相关推荐

  1. 从输入 URL 到页面加载完的过程中都发生了什么事情 —— 网络优化篇

     转自从输入 URL 到页面加载完的过程中都发生了什么事情 -- 网络优化篇 想到这不就是我这两年来研究的东西么,于是就接受一下挑战.网上已经有很多版本的答案了.这道题可以从浏览器端,网络传输和服 ...

  2. vue3+ant design vue 动态加载Icon图标

    问题与思路 在使用前端组件库时,我们常常会遇到需要动态加载 Icon 图标,如何处理这一需求,是前端开发人员必须思考的问题.在 vue 中,有一个内置组件 component,它的主要作用是配合 is ...

  3. 从输入URL到页面加载完成的过程中都发生了什么事情?

    为了便于理解,我将整个过程分为了六个问题来展开. 第一个问题:从输入 URL 到浏览器接收的过程中发生了什么事情? 从触屏到 CPU 首先是「输入 URL」,大部分人的第一反应会是键盘,不过为了与时俱 ...

  4. 【网络通信与信息安全】之深入解析从输入一个URL到页面加载完成的过程

    一.前言 从输入一个 URL,然后按下回车到显示页面,中间发生了什么?这是一道经典的面试题,不光前端面试会问到,后端面试也会被问到.这道题没有一个标准的答案,它涉及很多的知识点,面试官会通过这道题了解 ...

  5. 技术总结-从输入 URL 到页面加载完成的过程中都发生了什么事情?

    第一个问题:从输入 URL 到浏览器接收的过程中发生了什么事情? 从触屏到 CPU 首先是「输入 URL」,大部分人的第一反应会是键盘,不过为了与时俱进,这里将介绍触摸屏设备的交互. 触摸屏一种传感器 ...

  6. 从输入 URL 到页面加载完成的过程中都发生了什么事情?

    第一个问题:从输入 URL 到浏览器接收的过程中发生了什么事情? 从触屏到 CPU 首先是「输入 URL」,大部分人的第一反应会是键盘,不过为了与时俱进,这里将介绍触摸屏设备的交互. 触摸屏一种传感器 ...

  7. 从输入 URL 到页面加载完的过程中都发生了什么事情?

    1)把URL分割成几个部分:协议.网络地址.资源路径.其中网络地址指示该连接网络上哪一台计算机,可以是域名或者IP地址,可以包括端口号:协议是从该计算机获取资源的方式,常见的是HTTP.FTP,不同协 ...

  8. 从输入 URL 到页面加载完的过程中都发生了什么事情

    自己总结: 0.浏览器优化 0.1 智能匹配,DNS预取:输入w时已经把weibo.com的DNS预取了 1. 浏览器查找域名的ip 1.1 查看缓存 浏览器缓存.hosts文件 1.2 DNS服务器 ...

  9. 从输入URL到页面加载完的过程

    一个HTTP请求的过程 为了简化我们先从一个HTTP请求开始,简要介绍一下一个HTTP求情的网络传输过程,也就是所谓的"从输入 URL 到页面下载完的过程中都发生了什么事情" ●D ...

最新文章

  1. docker常用命令详解
  2. Ubuntu root密码设置
  3. 用存储过程创建的分页
  4. Android将允许纯C/C++开发应用
  5. Linux文本检索命令grep笔记
  6. Oracle 索引的维护
  7. C++工作笔记-使用namespace构建常量头文件
  8. 南通大学计算机学院何鹏,南通大学第一次自主评教授,加油!再评多点。
  9. Sun 解决方案大会归来
  10. 所有关于php上传,关于php文件上传
  11. Here we are 团队简介
  12. 查询硬盘序列号(serialNumber),系统安装日期等
  13. 微信小程序的事件绑定、接收参数、示例
  14. Python:运营自媒体,如何修改图片的MD5值
  15. 网页无法复制文字,一个插件解决问题!!!!
  16. qq 能上但是打不开网页
  17. 大连腾飞五期的企业_云存储腾飞的五个想法
  18. 全国计算机缴费时间江苏,2018年3月江苏全国计算机等级考试报名时间
  19. 时间戳转换为北京时间
  20. 双系统安装红旗linux,红旗LINUX怎么安装成双系统?

热门文章

  1. Tomcat一些小事
  2. 2.1 DNS服务介绍和安装
  3. android面试小结
  4. 如何在page_load方法判断是服务器端控件引发的page_load方法
  5. This probably means that Tcl wasn‘t installed properly.
  6. Boost.Asio技术文档汇总
  7. Zedboard学习(八):zedboard移植opencv
  8. php文字超链接怎么写,php 文本URL转换为超链接功能实例
  9. cimage和gdi绘图效率比较_GDI+和GDI绘图性能对比实验
  10. python乒乓球比赛规则介绍_乒乓球比赛规则及活动方案