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);
相关推荐
Dxy12393102162 小时前
JS AES加密详解
开发语言·javascript·ecmascript
溪语流沙2 小时前
【每天一个CSS | Day41】开关三连:一套状态机,三种视觉翻译
前端·css·html5·每日一练·按钮
信息安全失业大专人员2 小时前
每日了解一个智能体-WorkBuddy
开发语言·ai·c#·智能体
变与不变8062 小时前
css定位布局精讲
前端·css
猫头_2 小时前
MCP 开发实战:把你自己的后端 API 接入 Agent
人工智能·typescript·mcp
4ever.ov03 小时前
精学C++第一站 从命名空间到引用:C++入门核心语法全梳理(13000字长文)
开发语言·c++·clion
小杨互联网3 小时前
Go 现代 CLI 工具离线镜像合集
开发语言·后端·golang·开源·go·命令行
揽星河..3 小时前
【C语言】数组
c语言·开发语言·算法
FRing033 小时前
JavaScript入门到精通三十三(异常处理、call方法、apply方法、bind方法、防抖、节流)
开发语言·前端·javascript
geovindu3 小时前
rust: Semaphore Pattern
开发语言·后端·设计模式·rust·代理模式·企业级信号量模式·同步型模式