DVA框架统一处理所有页面的loading状态

dva 有一个管理 effects 执行的 hook,并基于此封装了 dva-loading 插件。通过这个插件,我们可以不必一遍遍地写 showLoading 和 hideLoading,当发起请求时,插件会自动设置数据里的 loading 状态为 true 或 false 。然后我们在渲染 components 时绑定并根据这个数据进行渲染。

dva-loading的使用非常简单,在index.js中加入:

// 2. Plugins
app.use(createLoading());

每个页面中将loading状态作为属性传入组件,在进行样式处理,比如转圈圈或者显示正在加载什么的,但是重点是,我们的app有多个页面,每个页面都这么做,很繁琐。

如何只做一次状态处理,每次请求期间都会触发loading状态呢,其实也很简单啦,因为dva-loading提供了一个global属性。

1、state中的loading对象

loading对象中的global属性表示的全局loading状态,models里是每个model的loading状态

所以我们根据state.loading.global指示全局loading状态。

2、一个父级组件

我们要向所有页面应用这个loading状态,那么我们可以在每个页面中使用一个父级组件来处理这个loading。上代码:

import React from 'react';
import styles from './app.css';
import { connect } from 'dva';
import { ActivityIndicator } from 'antd-mobile';const TIMER = 800;
let timeoutId = null;class App extends React.Component {state = {show: false}componentWillMount() {const { loading } = this.props;if (loading) {timeoutId = setTimeout(() => {this.setState({show: true});}, TIMER);}}componentWillReceiveProps(nextProps) {const { loading } = nextProps;const { show } = this.state;this.setState({show: false});if (loading) {timeoutId = setTimeout(() => {this.setState({show: true});}, TIMER);}}componentWillUnmount() {if (timeoutId) {clearTimeout(timeoutId);}}render() {const { loading } = this.props;const { show } = this.state;return (<div className={this.props.className}>{ this.props.children }<div className={styles.loading}><ActivityIndicator toast text="正在加载" animating={show && loading} /></div></div>
        );}
}const mapStateToProps = (state, ownProps) => {return {loading: state.loading.global && !state.loading.models.Verify}
};export default connect(mapStateToProps)(App);

说明:

1、<ActivityIndicator />是ant-design mobile的一个loading指示组件,animating属性指示显示与否,我们使用show和loading两个属性来控制显示与否。

2、为什么要show和loading两个参数,有个loading不就可以了吗?show的存在是为了实现一个需求:loading在请求发生的TIMER时间后出现,如果请求很快,小于TIMER时间,那么就不显示loading。如果没有这个需求,这个组件中可以只保留render()方法。

3、&& !state.loading.models.Verify这个是做什么的?这个的作用是排除Verify这个model对loading的影响,比如我不想在这个model对应的页面出现loading,可以在这里处理。

3、在router.js中使用这个父级组件

有了这个父级组件,那么在每个页面中加入这个父级组件,就可以实现loading,当然这个是可以在router.js中统一处理一下的。

比如:

        <Router history={history}><Route path="/admin" component={App}><IndexRoute component={AdminIndex} /><Route path="movie_add" component={MovieAdd} /><Route path="movie_list" component={MovieList} /><Route path="category_add" component={CategoryAdd} /><Route path="category_list" component={CategoryList} /><Route path="user_add" component={UserAdd} /><Route path="user_list" component={UserList} /></Route></Router>

这样,在进入/admin下的每个页面,都会加载App作为父组件。

4、OVER

转载于:https://www.cnblogs.com/zczhangcui/p/7419112.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487720.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2022第十二届PostgreSQL中国技术大会-核心PPT资料下载

一、峰会简介 本次大会以“突破•进化•共赢 —— 安全可靠&#xff0c;共建与机遇”为主题&#xff0c;助力中国数据库基础软件可掌控、可研究、可发展、可生产&#xff0c;并推动数据库生态的繁荣与发展。大会为数据库从业者、数据库相关企业、数据库行业及整个IT产业带来崭…

Ionic3 环境搭建以及基础配置实现(更新中)

GitHub:https://github.com/Teloi 环境配置输入以下命令安装 Ionic &#xff08;如果刚才设置了淘宝镜像源&#xff0c;可以使用 cnpm 代替 npm&#xff09;&#xff1a;npm install -g ionic需要注意的是&#xff0c;如果之前安装过 Ionic 2 的 beta 版本&#xff0c;需要先卸…

饶毅:脑、物理、化学、 生物、心理认知的交叉研究

本文转自公众号&#xff1a;脑科学学术笔记饶毅&#xff1a;脑、物理、化学、生物、心理认知的交叉研究陈鹏&#xff1a;作为一名科学家&#xff0c;饶老师用分子生物学和遗传学研究神经系统的发育和功能&#xff0c;从果蝇到人脑&#xff0c;从细胞到高级功能&#xff0c;他用…

构建城市大脑的未来标准,9个值得探索的规范

简述&#xff1a;50年来互联网从网状向类脑架构进化并与城市建设结合是城市大脑产生的根源。城市大脑建设是工程问题&#xff0c;但首先也是基础科学问题&#xff0c;掌握科技发展规律是发现和构建城市大脑建设标准的基础。通过总结互联网大脑模型的特征&#xff0c;提出了城市…

马斯克39也火星计划PPT

转自 | 软件定义世界&#xff08;SDX&#xff09;北京时间 5 月 31 日凌晨 3&#xff1a;23 &#xff0c;SpaceX 最新的载人龙飞船在美国肯尼迪航天中心 39A 发射台成功发射&#xff0c;在全球观众的注视下&#xff0c;载着两名宇航员还有一只恐龙玩偶前往国际空间站。 马斯克曾…

如何进入docker容器

在使用docker创建了容器之后&#xff0c;大家比较关心的就是如何进入该容器了&#xff0c;其实进入Docker容器有好几多种方式&#xff0c;这里我们就讲一下常用的几种进入Docker容器的方法。 1.使用docker attach进入Docker容器 Docker提供了attach命令来进入Docker容器。接下来…

麻省理工学院让软体机器人拥有了更好的触觉和空间感知能力

MIT来源&#xff1a; IEEE电气电子工程师当机器人可以抓取薯片且不会压碎它的时候&#xff0c;这就意味着它们越来越先进了。为了做到这一点&#xff0c;需要赋予它们触觉和本体感知 -- 一种对它们在空间位置中的感知。这种感觉在大多数软体机器人中是不存在的&#xff0c;但是…

5G时代,解锁机器视觉与千行百业的“完美关系”

来源&#xff1a; 脑极体在人工智能带来的诸多产业升级价值中&#xff0c;机器视觉毫无疑问将贡献最大的篇幅。无论是在工业、农业、服务业、金融业&#xff0c;基于视觉交互的智能解决方案都在智能化体系中占据了80%以上的比例。而且视觉往往还是知识图谱、语义分割、机器学习…

华为p10plus能用鸿蒙吗,华为P10/P10 Plus对比评测:自家兄弟大对决

华为P10/P10 Plus上手评测&#xff1a;离完美更近一步刚刚华为在巴塞罗那正式推出P10系列新机。早在发布会前&#xff0c;身边不少朋友都问“是等等S8还是选P10”。私以为这问题总有些眼熟。若干年前也是MWC&#xff0c;估计不少人会想&#xff1a;到底是买三星还是HTC。华为P1…

马斯克39页火星计划PPT曝光,我们能学到什么

来源&#xff1a;管理晨读本文ppt部分转载自公众号北美工程师求职顾问新闻报道部分来自于中新社SpaceX公司首席运营官马斯克一直梦想着移民火星&#xff0c;并在之前完成了许多的开发计划和实验。很多人说他是异想天开&#xff0c;也有很多人觉得火星目前没有找到绿色生物&…

Tomcat安装与环境变量的配置

Tomacat的下载 去Tomcat官网下载&#xff0c;我使用的是apache-tomcat-7.0.78的版本。 安装 下载完成之后&#xff0c;我们解压缩到相应的目录。这里我解压缩到d盘下面 1、然后去配置系统的环境变量&#xff0c;新建系统变量&#xff1a; catalina_home 2、下面两个系…

Gartner对于建设「数据中台」的建议

来源&#xff1a;云技术&#xff08;文&#xff1a;Gartner高级研究总监 孙鑫&#xff09;数据中台是中国本土诞生的一个名词&#xff0c;很多企业在“什么是数据中台”和“我要上XX中台”徘徊。其炒作程度跟当年的“大数据” 一词有的一拼&#xff0c;如果用Gartner的炒作周期…

[python 学习] requests 库的使用

1、get请求 # -*- coding: utf-8 -*- import requestsURL_IP "http://b.com/index.php" pyload {cate:1,id:2} headers {User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36} def use_…

直通输出设备 android kodi,【本地播放】利用Kodi媒体播放器轻松实现源码输出DTS到功放...

本帖最后由 PlyFly 于 2015-2-13 22:11 编辑各位花粉注意了&#xff0c;本次发布的B056固件&#xff0c;华为终于修复了DTS源码输出到功放不能正常解码的问题(如功放无声音、破音等等)。经实际测试&#xff0c;不用Kodi就能轻松将DTS源码输出到功放解码&#xff0c;且无任何异常…

3纳米、2纳米、1纳米芯片该如何造?

来源&#xff1a;EETOP编译目前台积电和三星正在加紧开发他们的3nm和2nm技术&#xff0c;目前预计分别在2022年和2024年推出。1nm及以上工艺也正在进行中&#xff0c;但是距离仍然很远。业界希望从3nm开始&#xff0c;从当今的finFET晶体管过渡到全能栅极或称为环绕式栅极FET(G…

字符串数组

字符串&#xff1a;用双引号引起来的多个字符“\0” 是字符串结束标志 字符串的存储方式 字符数组 字符指针 字符串的键盘输入:字符串在输入时只能使用字符数组&#xff0c;不能使用字符指针 字符串的库函数:str系列函数共四种&#xff1a;strcmp&#xff1a;比较是否相同 (从两…

华为鸿蒙os再见了安卓,再见了安卓!华为鸿蒙OS 2.0正式登场,开机只需19秒

大家也都知道&#xff0c;华为从前年开始就被老美打压&#xff0c;以至于无法使用谷歌GMS服务&#xff0c;而从去年开始&#xff0c;华为祭出了鸿蒙OS大招&#xff0c;并且也从1.0版本迭代到了2.0版本&#xff0c;首个搭载机型也由6月份发布的P50提前至近期入网的Mate40 Pro 4G…

万字长文概览深度学习的可解释性研究

作者&#xff1a;知乎—王小贱地址&#xff1a;https://www.zhihu.com/people/wang-xiao-jian-38-81《深度学习的可解释性研究概览》包含3篇内容&#xff0c;作者将用尽可能浅显的语言带领大家了解可解释性的概念与方法以及关于深度学习可解释性工作的研究成果。深度学习的可解…

html如何让框架的边框消失,css如何让边框透明?

透明一般认为是一种颜色属性&#xff0c;但是并没有这个数值。我们找到了一种让边框实现透明的最佳方案&#xff0c;运用RGBA设置。css可以使用RGBA设置边框透明&#xff0c;RGBA在RGB的基础上多了控制alpha透明度的参数&#xff0c;我们使用RGBA设置边框颜色同时可以设置边框透…

spring boot / cloud (七) 使用@Retryable来进行重处理

spring boot / cloud (七) 使用Retryable来进行重处理 前言 什么时候需要重处理? 在实际工作中,重处理是一个非常常见的场景,比如:发送消息失败,调用远程服务失败,争抢锁失败,等等,这些错误可能是因为网络波动造成的,等待过后重处理就能成功.通常来说,会用try/catch,while循环…