dva中的model.ts

module.ts文件

TypeScript 复制代码
import {Effect,Reducer} from "umi"
import * as service from './service';


const MODEL_NAME = 'pastureDashboard'; // 注意这里的name值,将来index调用的时候用

// 定义类型
export interface modelState {
  pastureList: any,
}

// 初始化数据
const initState: modelState = {
  pastureList: [],  
}

// 定义module中的操作
export interface PastureBoardType {
  namespace: string; // 这里的命名空间就是展示页面得到数据的键
  state: modelState;  // 参数
  effects: {
    // 包含的方法名---请求接口的方法
    queryLevel: Effect;
  };
  reducers: {
    // 包含的方法名---请求接口后,修改上边初始化数据的内容
    // yiele put({type: 'save',})
    // type里的名字就是这里的名字
    save: Reducer
  },
}



const Model: PastureBoardType = {
  namespace: MODEL_NAME,
  state: {...initState},

  // 异步操作
  effects: {
    /*
    * 函数前的*不可丢,相当于 async...await的使用
    * 固定的三个参数  { payload }, { call, put }
    * payload: 请求接口传递过来的参数
    * call: 调用接口的方法  
    *   yield call('请求的地址',参数)
    * put: 成功后修改数据的方法
    *   yield put(type: '这里的值和reducers中定义的名字要一样')
    * */
    *queryLevel({ payload }, { call, put }) {
      const params = {
        ...payload
      }
      const {data} = yield call(service.queryInit, params)
      if(data) {
      yield put({
          type: 'save',
          payload: {
            pastureList: data
          },
        })
      }
    },
  },

  // 同步
  reducers: {
    // model中的数据、传过来的参数
    save(state,{payload}): modelState {
      return {
        ...state,   // 返回state中有的数据
        ...payload  // 修改对应数据
      }
    }
  },
}

export default Model;

index.ts文件

TypeScript 复制代码
import { connect } from 'umi';
import { Dispatch } from '@@/plugin-dva/connect';

interface Props {
  dispatch: Dispatch;
}

const Pasture: React.FC<Props> = (props)=>{
  const {dispatch} = props
  const MODEL_NAME = 'pastureDashboard';    // module中的namespace
  const {pastureList} = props[MODEL_NAME]   // 获取module中的值
}

const queryInit = function () {
  /**
  * 调用module中的方法
  * type: 是在module中 namespace + effect中的名字
  * payload:{} 调用接口需要的传参
  * */
  dispatch({
     type: `${MODEL_NAME}/queryMilk4level`,
     payload: {
       ...data
      },
    });
  }
}

// 调用完接口后在这里打印查看结果
console.log('pastureList',pastureList)


/**
* index文件 关联 module文件
* 函数里的参数是 module 中的 namespace
* export default connect(({ namespace }) => ({ namespace }))();
* export default connect()(这个index的导出名字)
*/
export default connect(({ pastureDashboard }) => ({
  pastureDashboard,
}))(Pasture);
相关推荐
雪碧透心凉_23 分钟前
while 循环与循环嵌套
开发语言·python
乐观勇敢坚强的老彭30 分钟前
信奥C++一维数组笔记
开发语言·c++·笔记
这就是佬们吗38 分钟前
Python入门⑤-异常处理、文件操作与实战项目
开发语言·数据库·python·算法·pycharm
Old Uncle Tom41 分钟前
银行用户画像 -- 金融目标与需求意图
前端·人工智能·金融
IT_陈寒1 小时前
Vue的响应式让我加班到凌晨3点,原来问题出在这
前端·人工智能·后端
东方小月1 小时前
从0开发一个 Coding Agent(一):前言
前端·人工智能·typescript
恋猫de小郭1 小时前
Flutter 全新真 3D 实现,用 flutter_scene 能开发一个「我的世界」
android·前端·flutter
asdzx671 小时前
Python PDF 拆分实战指南:单页拆分与按需页码范围拆分
开发语言·python·pdf
会周易的程序员1 小时前
Mermaid Renderer:一款的图表可视化小工具
前端·vue.js·流程图·mermaid