1、models层
model 是 dva 中最重要的概念。以下是典型的例子:
import { addAssessmentIndex} from 'services/editindex'
import { browserHistory } from 'react-router'
export default {
namespace: 'editindex',
state: {
tableTime: '',
workModal: {
visible: false,
assessmentloading: false,
assessmentFrequencyType: '',
startTimeMonth: '',
startTimeDay: '',
endTimeMonth: '',
},
},
subscriptions: {
setup ({ dispatch, history }) {
history.listen((location) => {
if (location.pathname === '/indexmanage/editindex') {
// 自动生成作业规则
location.state.record && dispatch({ type: 'changeworkModal', payload: { ...location.state.record.jobGenerationRule } })
// 修改主指标时,根据选择是否生成作业规则设置请设置按钮是否显示
location.state.record && location.state.record.generateWorkStatus && dispatch({ type: 'changeworkModal', payload: { showButton: Number(location.state.record.generateWorkStatus) === 1 } })
// 新增主要考核指标 设置自动生成作业各参数为空
if (location.state && location.state.addOrupdate === 'add') {
dispatch({ type: 'changeworkModalclose' })
dispatch({ type: 'changeStates', payload: { assessmentIndexId: '' } }) // 设置当前操作大指标id为空
}
}
})
},
},
effects: {
* changeStates ({
payload,
}, { put }) {
yield put({ type: 'updateStates', payload })
},
* updateSubdivisionIndex ({ payload }, { put, call, select }) {
const { fileModal } = yield select(state => state.editindex)
const { form } = payload
payload = { ...payload, referenceFile: fileModal.selectedRowKeys.join(',') }
const res = yield call(updateSubdivisionIndex, payload)
console.log('res.success', res.success)
if (res.success) {
yield put({ type: 'subdivisionSuccess', payload: { form } })
}
},
// 修改、新增细分指标成功后再跳转
* subdivisionSuccess ({ payload }, { put }) {
const { form } = payload
yield put({ type: 'changefileModalclose' })
yield put({ type: 'changefileModal', payload: { subdivisionloading: false } })
browserHistory.goBack()
form.resetFields
},
},
reducers: {
updateStates (state, { payload }) {
const statr = {
...state,
...payload,
}
return statr
},
updatefileModal (state, { payload }) {
const { fileModal } = state
const newState = {
...state,
fileModal: { ...fileModal, ...payload },
}
return newState
},
},
}