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);
相关推荐
阿里小阿希6 分钟前
解决 pnpm dev 运行报错的坎坷历程
前端·node.js
未脱发程序员17 分钟前
分享一款开源的图片去重软件 ImageContrastTools,基于Electron和hash算法
前端·javascript·electron
草莓熊Lotso1 小时前
【C语言指针超详解(三)】--数组名的理解,一维数组传参的本质,冒泡排序,二级指针,指针数组
c语言·开发语言·经验分享·笔记
geovindu1 小时前
vue3: pdf.js 2.16.105 using typescript
javascript·vue.js·typescript·pdf
视频砖家1 小时前
Web前端VSCode如何解决打开html页面中文乱码的问题(方法2)
前端·vscode·vscode乱码·vscode中文乱码·vscode中文编码
2401_837088501 小时前
CSS transition过渡属性
前端·css
我爱吃朱肉1 小时前
深入理解 CSS Flex 布局:代码实例解析
前端·css
喝养乐多长不高1 小时前
Spring Web MVC基础理论和使用
java·前端·后端·spring·mvc·springmvc
Blossom.1181 小时前
使用Python和TensorFlow实现图像分类的人工智能应用
开发语言·人工智能·python·深度学习·安全·机器学习·tensorflow
CodeWithMe2 小时前
【C/C++】C++中noexcept的妙用与性能提升
c语言·开发语言·c++