方案1.你可以在model里面操作

在model里面的state里面声明一个变量state,默认是false,effect函数执行开始就将其改为true,然后等call()然后结束后又将其改为false.

 state{
isloading:false,
isEnd:false //你也可以加一个变量去区分其状态
} yield put({
type: 'save',
payload: {
isloading: true,
isEnd: false,
},
});
const res = yield call(query, payload);
yield put({
type: 'save',
payload: {
isloading: false,
isEnd: true,
},
});

这种方案的好处是我自己写的逻辑,我自己随时可以调节加条件等. 缺点也很明显,需要额外加很多逻辑.

方案2.dva自带的loadingEffect

  const loadingEffect = useSelector((state) => state.loading);

我们先看看loadingEffect里面都有些啥

它是一个对象,包含三个属性,models、effect、global.

它反馈了所有dva的在此页面执行了的models和effects,其中global是任何页面都能拿到的.

effects

精确到了某个model下的单一effect函数,当它在执行时,loadingEffect对应的值就是true,执行完了或者未执行就是false.

let isLoading=loadingEffect.effects['baseInfo/queryAccess']

models

指某个models下面的所有effect函数全部执行完成之前就是true,执行完之后或者未执行就是false

let isLoading=loadingEffect.models['baseInfo']

我们需要明确需求,根据需要去决定使用effects还是models,如果页面上使用了models,那页面的组件发起dispatch时会更新loadingEffect的状态,引起页面重新刷新,也就是说,多个组件之间会被影响.我的另一篇博客中有类似的案例:子组件dispatch导致其他页面刷新问题解决

【dva】如何监听异步请求是否完成(页面loading)的更多相关文章

  1. 李洪强iOS开发本人集成环信的经验总结_07_监听好友请求

    李洪强iOS开发本人集成环信的经验总结_07_监听好友请求 来到Appdalegate中: 遵守代理协议 设置代理  实现监听好友请求的回调的方法

  2. 怎样监听HTTP请求的发出与完成

    1. 监听HTTP请求发出的事件是: xhr.onloadstart 2. 监听HTTP请求结束的事件是: xhr.onloadend xhr.onloadstart = function() { / ...

  3. Spring Boot实现一个监听用户请求的拦截器

    项目中需要监听用户具体的请求操作,便通过一个拦截器来监听,并继续相应的日志记录 项目构建与Spring Boot,Spring Boot实现一个拦截器很容易. Spring Boot的核心启动类继承W ...

  4. nginx源代码分析--监听套接字的创建 套接字的监听 HTTP请求创建连接

    作为一个webserver,那么肯定是有监听套接字的,这个监听套接字是用于接收HTTP请求的,这个监听套接字的创建是依据配置文件的内容来创建的,在nginx.conf文件里有多少个地址就须要创建多少个 ...

  5. 怎样监听HTTP请求的成功、失败与进行时

    1. 监听请求成功: xhr.onload 2. 监听请求失败: xhr.onerror 3. 监听请求数据下载中: xhr.onprogress xhr.onload = function() { ...

  6. js 监听ajax请求

    function hookSend(hook) { if (!XMLHttpRequest.prototype._oldSend) XMLHttpRequest.prototype._oldSend ...

  7. Fiddler监听Https请求响应

    Fiddler问题 - creation of the root certificate was not successful 解决办法: http://localhost:8888/    安装证书 ...

  8. vue项目如何监听窗口变化,达到页面自适应?

    [自适应]向来是前端工程师需要解决的一大问题--即便作为当今非常火热的vue框架,也无法摆脱--虽然elementui.iview等开源UI组件库层出不穷,但官方库毕竟不可能满足全部需求,因此我们可以 ...

  9. 监听HTTP请求

    using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Oracle.DataAccess.Client; using System; usi ...

随机推荐

  1. 导出 doc

    ... /** * 导出word * @return * @throws Exception */ @JCall public String word() throws Exception{ Stri ...

  2. 【linux系统】命令学习(一)ssh

    ssh 1.在终端执行命令  ssh -p22 username@host 2.密码输入是看不到内容的 3.登入成功后默认进入的是home目录,就是根目录下的home目录 4.[root@VM-4-1 ...

  3. <C#任务导引教程>练习二

    //6,goto语句求1+++100之和using System;class Program{    static void Main()    {        int i=1,sum=0;     ...

  4. [luogu1390]公约数的和

    1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 2000005 4 long long n,ans,f[N],vi ...

  5. 微信小程序如何重写Page方法?以及重写Page方法给开发者带来的好处

    17,18年的时候,我当时主要开发小程序,那时候领导想看一下小程序的访问量,还有一些埋点的需求,于是我们的小程序就接入了阿拉丁统计. 阿拉丁的接入方式除了配置以外,主要就一行引入代码.官方要求将以下代 ...

  6. 2020第十三届全国大学生信息安全竞赛创新实践能力赛rceme writerup

    审计代码 传入参数a,进入parserIfLabel函数 发现参数a的模板,a的格式要匹配pattern,如{if:payload}{end if} 可知ifstr是a中匹配的第一组的值,即paylo ...

  7. Python爬虫3大解析库使用导航

    1. Xpath解析库 2. BeautifulSoup解析库 3. PyQuery解析库

  8. Python—安装跟爬虫相关的包

    舆情爬虫分析:硬件:   4台服务器,分别放redis.python爬虫.mysql和 kafka四大板块.软件:1. mysql2. redis    #leap1  /usr/bin/redis- ...

  9. 31-Longest Common Prefix

    Longest Common Prefix My Submissions Difficulty: Easy Write a function to find the longest common pr ...

  10. SPI详解2

    串行外设接口 (SPI) 总线是一种运行于全双工模式下的同步串行数据链路.用于在单个主节点和一个或多个从节点之间交换数据. SPI 总线实施简单,仅使用四条数据信号线和控制信号线(请参见图 1). 图 ...