React入门之models请求数据

项目基本结构

一.接口 services.js ,模块 models.js ,HTML页面

三者同级
在这里插入图片描述

二.接口配置-services

import { get, post } from '@/utils/request';

//  get请求, 获取列表
export const getList = (params) => {
  return get(`/api/demo/list`, params);
};

// post请求,获取列表
export const postList = (params) => {
  return post(`/api/demo/list`, params);
};

三.模块配置-models

// 这里是引入接口名称.   上文
import { getList, postList } from '../services';

export default {
// 仓库名称,用于指定某个仓库
  namespace: 'demo',
  // 仓库存储数据
  state: {
    welfareList: [],
  },
  effects: {
  // 处理请求
    *getList({ payload }, { call, put }) {
    //  配置返回值,接口,参数
      const response = yield call(getList, payload);
      // upadtaState 方法用于在仓库中存储返回值
      yield put({
      //  updataState 方法在底部
        type: 'updateState',
        payload: {
        //  用于更新本仓库中state中数组的值
          welfareList: response?.data,
        },
      });
    },
    *postList({ payload }, { call }) {
      const response = yield call(postList, payload);
      直接返回后端请求数据结果结果
	  retuen response?.data
    },
  },
  reducers: {
  // 用于更新数据的方法
    updateState: (state, { payload }) => {
      return {
        ...state,
        ...payload,
      };
    },
  },
};

四、页面配置

index.js中引入单个models

app.model(require("./models/modules/global").default);

如果要引入多个models,就需要结合dva/dynamic

dynamic({
    app,
    models: () =>
      models.filter(model => modelNotExisted(app, model)).map(m => import(`../models/${m}.js`)),
    // add routerData prop
    component: () => {}
})
import React, { useEffect } from 'react';
// 引入connect
//简单来说connect是用来连接前端的ui界面和和前端model的一个嫁接桥梁
//通过使用connect将model里面定义的state,和dispatch,和histoey方法等
//传递到前端供前端使用
import { connect } from 'umi';

const Index = (props) => {
  // 从props中取出dispatch及刚刚仓库中写的默认state的welfareList
  const { dispatch, welfareList } = props;
  // 页面加载时发送请求
  useEffect(() => {
    // 开始发送请求
    dispatch({
      // models仓库名及方法名
      type: 'demo/getList',
      // 传递的参数
      payload: { id: 1 },
    });
    // 因在model中设置了返回的数据,统一存储&更新到了state中, 所以不用通过.then()方式
    // 获取返回值
  }, []);
  // 随即打印 即可直接看到值,当state更新时,页面数据也会更新
  // console.log('welfareList',welfareList)

  return <div>小样</div>;
};

//  连接的仓库名  因 加了花括号 所以取用state中的数组 直接取的
//  否则应写  const { dispatch, demo:{ welfareList }} = props;
export default connect(({ Demo }) => {
  return Demo;
})(Index);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值