React中Dva的models简单使用

import { EffectsCommandMap } from 'dva';
import { AnyAction, Reducer } from 'redux';
import {fetchGql} from "@/fetch";

export type Effect = (
  action: AnyAction,
  effects: EffectsCommandMap & { select: <T>(func: (state: StateType) => T) => T },
) => void;

interface StateType {
  [modalState:string]:any;
}

export interface ModelType {
  namespace: string;
  state: StateType;
  subscriptions: {
    [modalSubscriptions:string]:Function
  }
  effects: {
    [modalEffect:string]: Effect;
  };
  reducers: {
    [modalReducer:string]: Reducer<StateType>;
  };
}

export const gqlState = (gqlApi: string, model: any):ModelType =>
  Object.assign(
    {
      // 命名空间为:gql+Api的名字(api的首字母大写)
      namespace: `gql${gqlApi.replace(gqlApi[0], gqlApi[0].toUpperCase())}`,
      effects: {
        *[gqlApi + 'Effect']({ type, payload }: any, { put, call, select }: any) {
          let ret;
          try {
            ret = yield call(fetchGql, payload);
          } catch (e) {
            alert(`访问gqlApi出错:${e.message}`);
          }
          yield put({ type: gqlApi, payload: ret.data[payload] });
        },
      },
      reducers: {
        [gqlApi](state: any, { payload }: any) {
          alert(`请在reducers里写一个同名的函数来覆盖本函数:${gqlApi}`);
        },
      },
    },
    model,
  );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值