react项目 初始dva

2 篇文章 0 订阅

在实际的react项目中,目前使用的react+dva的方式进行项目的构建
一些在dva中的小点进行第一篇dva 的整理
在实际的项目开发的过程中:models与servers是分开的文件夹,通常在models中会将server请求的方法在dva中进行引入
在这里插入图片描述
以下是一个models的文件

export default {
  namespace: 'msg',//namespace为当前models的命名空间,在@connect时会用到

  state: {//当前models的所有state
    msgTypeList: {
      list: [],
      pagination: {},
    },
    data:undefined
  },
  
	// effects是Action 处理器,Effect 是一个 Generator 函数,内部使用 yield 关键字,标识每一步的操作。
	//dva 提供多个 effect 函数内部的处理函数,比较常用的是 call 和 put。

  effects: {
    // 获取标签列表
    *getMsgLabelLsitByObj({ payload, callback }, { call, put }) {
      const response = yield call(getMsgLabelLsitByObj, payload);//getMsgLabelLsitByObj为函数名,call为一步函数

      if(response.status=="ok"){
        message.success('查询成功',2);
        yield put({//发出一个 Action,type:reducers中的方法的名称,payload:这个action要传递的数据
          type: 'save',
          payload: response,
        });
        if (callback) callback(response);
      }else{
        message.error('查询失败',2)
      }
    },
 
    //  编辑标签
    *updateMsgLabel({ payload, callback }, { call, put }) {
      const response = yield call(updateMsgLabel, payload);
      if(response.status=="ok"){
        message.success('修改成功',2);
        if (callback) callback(response);
      }else{
        message.error('修改失败',2)
      }
    },
  },
//reducers:通过action中接收到的值与当前model中的state,计算输出新的state
  reducers: {
    save(state, action) {//state:当前的model中的原本的state,action:接收payload传递过来的数据
      let dataList= {
        list: action.payload.data.data.list,
        pagination: {
          current:action.payload.data.data.pageNum,
          pageSize:action.payload.data.data.pageSize,
          total:action.payload.data.data.total
        },
      }
      return {
        ...state,
        data: action.payload,
        msgTypeList:dataList
      };
    },
  },
};

在组件中的使用

import { connect } from 'dva';
/* msg:为model中namespace的名字 */
@connect(({ msg, loading }) => ({
  msg,
  loading: loading.models.rule,
}))

在某个方法里面使用dispatch

const { dispatch } = this.props;
dispatch({
  type: 'msg/getMsgPushList',//msg:为model中namespace的名字 ,getMsgPushList:model中的effect中的某一个函数名
  payload:{//payload:这里的作用是传递参数
    pushTime:flagVal==0?'':pushTimeVal,
    keyword:flagVal==0?'':keywordVal,//关键字
    label:flagVal==0?'':labelVal,//标签
    pageNum :1,
    pageSize :10
  },
  callback:response=>{
    _this.setState({
      successFlag:true,
    })
  }
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值