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产业带来崭…

android webview fragment,android studio中Fragment使用webview返回上一頁的問題

在Fragment中使用了騰訊的X5 webview,雖然好用,但是在Fragment中傳遞消息困難,想要返回上一頁,還得各種消息傳遞什么的,麻煩.可是在Fragment中又不能使用onKeyDown,那怎么辦了?哎,我是太菜了,也不想動腦子,那就在Fragment的最上面加了一個標題欄,里面放了一個textView標簽,監聽…

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;他用…

android调用webservice传参数,android调用webservice接口获取信息

我的有一篇博客上讲了如何基于CXF搭建webservice&#xff0c;service层的接口会被部署到tomcat上&#xff0c;这一篇我就讲一下如何在安卓中调用这些接口传递参数。1.在lib中放入ksoap2的jar包并导入2.在xml 配置文件中加入&#xff1a;3.接下来就要通过代码调用借口了String W…

YYT 0659 - 2008全自动凝血分析仪

YYT 0659 - 2008全自动凝血分析仪转载于:https://www.cnblogs.com/sunlyk/p/7427625.html

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

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

android 下载器布局,Android Studio下载约束布局失败

To install:– com.android.support.constraint:constraint-layout-solver:1.0.0-alpha3 (extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha3)– com.android.support.constraint:constraint-layout:1.0.0-alpha3 (extras;m2reposito…

第一节《Git初始化》

创建版本库以及第一次提交 首先我看查看一下git的版本&#xff0c;本地的git是用的yum安装方式&#xff0c;如果想使用源码安装请参考官方文档。 [rootgit ~]# git --versiongit version 1.7.1 再开始Git之前&#xff0c;我们需要设置一下Git的配置变量&#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容器。接下来…

android surface windows,【技术攻略】s3 硬盘android+windows10双系统

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼grub.cfg内容set timeout5set default"0"menuentry Windows {search --file --no-floppy --setroot /EFI/Microsoft/Boot/bootmgfw.efichainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi}menuentry "Android-…

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

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

android图片文件的路径地址与uri的相互转换,android图片文件的路径地址与Uri的相互转换...

uri ---> 绝对路径/*** Try to return the absolute file path from the given Uri** param context* param uri* return the file path or null*/public static String getRealFilePath( final Context context, final Uri uri ) {if ( null uri ) return null;final Stri…

centos 环境变量配置

CentOS系统下如何将PHP和mysql命令加入到环境变量中&#xff0c;在Linux CentOS系统上 安装完php和MySQL后&#xff0c;为了使用方便&#xff0c;需要将php和mysql命令加到系统命令中&#xff0c;如果在没有添加到环境变量之前&#xff0c;执行“php -v”命令查看当前php版本信…

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

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

Tkinter图片按钮

1 imgBtn tk.PhotoImage(filetest.png) 2 tk.Button(imageimgBtn).pack() 3 tk.mainloop() 转载&#xff0c;来源简书评论&#xff0c;地址&#xff1a;http://www.jianshu.com/p/5c7a1af4aa53 侵删转载于:https://www.cnblogs.com/yechenkai/p/7429553.html

华为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、下面两个系…