dva-loading插件

作者: 林ze宏 | 来源:发表于2018-11-10 23:59 被阅读652次

    说明

    dva-loading 插件是对异步才作用的;该插件是对reducers新增state数据(loading对象),所以,在页面应该导入对应的数据(也就是loading数据),对其进行操作。

    Install

    $ npm install dva-loading --save
    

    Usage

    import createLoading from 'dva-loading';
    
    const app = dva();
    app.use(createLoading(opts));
    

    项目应用实例

    src/index.js

    index.js

    UI Component (UserPage)

    import React from 'react';
    import { connect } from 'dva';
    import { userfetch } from '../actions';
    
    const UserPage = (props) => {
      console.log(props.loading);
    
      const { userfetch } = props;
      function start() {
        userfetch();
      }
      return(
        <div>
          <button onClick={start}>发送请求</button>
        </div>
      )
    }
    const mapStateToProps = (state) => {
      console.log(state);
      return {
        user: state.users,
        loading: state.loading
      }
    }
    
    export default connect(mapStateToProps, { userfetch })(UserPage);
    
    
    
    

    说明:

    • 当引入dva-loading插件之后,reducers中的state新增了loading对象,如下图所示,在UI Component打印出结果;

    • loading对象中有三个变量,effects、global、models。


      还没有发送异步请求,注意loading对象中三个变量的初始值
    • 当发送一个异步请求时,loading值的变化,如下图所示:

    异步请求,loading值变化

    分析:
    1:请求前,loading为:

    laoding: {
        effects: {}
        global: false
        models: {}
    }
    
    请求前,global为false,effects和models为空对象
    
    

    2:请求中,loading为:

    loading: {
        effects: {users/user/fetch: true}
        global: true
        models: {users: true}
    }
    
    
    global为true;
    effects的key为dispatch的type值,value为true;
    models的key为namespace值,value为true;
    
    

    3:请求完成,loading为:

    loading: {
        effects: {users/user/fetch: false}
        global: false
        models: {users: false}
    }
    
    
    global为false;
    effects的key为dispatch的type值,value为false;
    models的key为namespace值,value为false;
    
    

    应用实例

    import React from 'react';
    import { connect } from 'dva';
    import { userfetch } from '../actions';
    
    const UserPage = (props) => {
      console.log(props.loading);
      const { userfetch } = props;
      const { error, user } = props.user;
      
      const isFetch = props.loading.effects['users/user/fetch'];
    
        let data = "";
        if (isFetch) {
          data = '正在加载中。。。'
        } else if (user) {
          data = user.data[0]['name'];
        } else if (error) {
          data = error.message;
        }
    
      function start() {
        userfetch();
      }
    
      return(
        <div>
          <h1>User</h1>
          <p>{data}</p>
          <p>
            <button onClick={start}>发送请求</button>
          </p>
        </div>
      )
    }
    
    const mapStateToProps = (state) => {
      console.log(state);
      return {
        user: state.users,
        loading: state.loading
      }
    }
    
    export default connect(mapStateToProps, { userfetch })(UserPage);
    
    
    

    重点代码:

     const isFetch = props.loading.effects['users/user/fetch'];
    
    
    • 利用effects,判断局部loading;
    • 也可以在项目最上层组件,利用global属性,只要发送异步请求,就展示loading状态;

    相关文章

      网友评论

        本文标题:dva-loading插件

        本文链接:https://www.haomeiwen.com/subject/qeeaxqtx.html