dva数据流

import { Effect, ImmerReducer } from 'umi'
import { login } from '@/services/admin' // *******************
export interface ILoginState {
  adminname: string
  token: string
  role: number
}

export interface ILoginModelInterface {
  namespace: 'admin' // 接口中的namespace 直接写模块的名称即可
  state: ILoginState,
  effects: {
    loginReq: Effect
  },
  reducers: {
    changeAdminName: ImmerReducer<ILoginState>,
    changeToken: ImmerReducer<ILoginState>,
    changeRole: ImmerReducer<ILoginState>
  }
}

const LoginModel: ILoginModelInterface = {
  namespace: 'admin', // 命名空间 --- 区分模块
  state: { // 初始化的状态
    adminname: '',
    token: '',
    role: 1
  },
  effects: { // 可以看作是 vuex中actions, 必须写成 generator 的写法
    // payload 解构赋值 说明传入过来的参数是以对象形式传递的
    // call 代表调用 异步操作的方法
    // put 代表 类似于之前的 dispatch
    *loginReq ({ payload }: any, { call, put }: any) {
      console.log(11111)
      // 异步操作数据 必须通过yield 执行
      // call(异步函数, 函数需要的参数)
      const res = yield call(login, payload)
      console.log(res)
      // 修改状态 ---- 必须使用 yield 表示代码的继续执行
      // 使用时必须是对象形式
      yield put({ type: 'changeAdminName', payload: res.data.data.adminname})
      yield put({ type: 'changeToken', payload: res.data.data.token})
      yield put({ type: 'changeRole', payload: res.data.data.role})

    }
  },
  reducers: { // 类似于vuex中的 mutations
    changeAdminName (state: ILoginState, action: any) {
      state.adminname = action.payload
    },
    changeToken (state: ILoginState, action: any) {
      state.token = action.payload
    },
    changeRole (state: ILoginState, action: any) {
      state.role = action.payload
    }
  }
}

export default LoginModel

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值