• dva model


    原文:https://blog.csdn.net/lizhen_software/article/details/79455150

    1、model相当于vue的vuex,里面包含了但向数据流的所有的控制

    2、在vue中我们一般定义一个全局的头部标题字段,并且在mounted中调dispatch改变,但在dva的model中这段分为了两个部分,其中effects是异步修改数据时调用的, 也就是在react的componentDidMount的生命周期里面需要调用的是异步的effects的action,但如果是用户操作的某个方法是,可以直接调用reducers里面的action

    3、注意如果在组件中要调用dispatch的话,必须导入connect,并且注入,才可以调用,不然会报不存在的方法

    4、dva规定比较强制,如果你是异步的方法必须调用effects的action,绝对不能调用同步的reducers,否则会报错,但同步的操作可以调用异步的effects,但因为是异步的操作,数据有时不会直接变过来,如果是操作的话,建议用reducers的同步

    5、2中说effects改变数据时不能直接修改state,要不直接用dispatch改变reducers中的某个值,要不直接将修改put进去,代码如下:

    const state = () => ({
    topTitle: "我的名字"
    });
    export default {
    namespace: 'user',
    state: state(),
    effects: {
    * getUserList({ payload, request }, { put, titleName }) {
    console.log(payload)
    yield put({
    type: 'update',
    payload: {
    topTitle: payload.titleName
    }
    });
    }
    },
    reducers: {
    update( state, action ) {
    return { ...state, ...action.payload };
    }
    }
    };
    componentDidMount() {// 改变标题的名字
    this.props.dispatch({ type: 'user/getUserList',payload: {
    titleName:'订单详情'
    }});
    }

    数据流向

    数据的改变发生通常是通过用户交互行为或者浏览器行为(如路由跳转等)触发的,当此类行为会改变数据的时候可以通过 dispatch 发起一个 action,如果是同步行为会直接通过 Reducers 改变 State ,如果是异步行为(副作用)会先触发 Effects 然后流向 Reducers 最终改变 State

  • 相关阅读:
    IOS-小项目(饿了么 网络部分 简单实现)
    IOS 网络浅析-(十二 UIWebView简介)
    IOS 网络-深入浅出(一 )
    IOS 杂笔-11(实现在外部无法改变UIView的size)
    IOS 杂笔-12(类别de巧用 有便于Frame的操作)
    IOS 杂笔-13(appearance的巧妙使用)
    IOS 杂笔-14(被人遗忘的owner)
    IOS 杂笔-15(知识小点 readonly)
    IOS 日期的简洁格式展示
    Eclipse代码注释模板修改
  • 原文地址:https://www.cnblogs.com/zyx-blog/p/9397201.html
Copyright © 2020-2023  润新知