import { AnyAction, Reducer } from 'redux'; import { EffectsCommandMap } from 'dva'; import { fakeRegister } from './service'; export interface StateType { status?: 'ok' | 'error'; currentAuthority?: 'user' | 'guest' | 'admin'; } export type Effect = ( action: AnyAction, effects: EffectsCommandMap & { select: (func: (state: StateType) => T) => T }, ) => void; export interface ModelType { namespace: string; state: StateType; effects: { submit: Effect; }; reducers: { registerHandle: Reducer; }; } const Model: ModelType = { namespace: 'userRegister', state: { status: undefined, }, effects: { *submit({ payload }, { call, put }) { const response = yield call(fakeRegister, payload); yield put({ type: 'registerHandle', payload: response, }); }, }, reducers: { registerHandle(state, { payload }) { return { ...state, status: payload.status, }; }, }, }; export default Model;