-
put
等同 dispatch
- dva 默认所有 effect 为 takeEvery, 可以使用下面的写法实现 takeLatest 等
const takeLatest = { type: 'takeLatest' };
effects: {
addDelay: [
function*({ payload }, { call, put }) {
yield call(delay, 100);
yield put({ type: 'add', payload });
},
takeLatest,
],
}
- dva fetch catch 到的错误还是会侵入 effect 函数, 使用下面的函数阶段, 或者内部 throw ,在 effect 函数中 catch 处理
if (response instanceof Error) {
return
}
- effect 函数中, yield 后一定要使用 effect 辅助函数(call,put,all,select等)
- 同时执行多个 yield, 使用辅助函数 all
yield all([
put({
type: 'getListSuccess',
payload: response,
}),
put({
type: 'tableInfo/setPaginationInfo',
payload: {
tableName: payload.tableName,
paginationInfo: {
current: response.data.pageNum,
pageSize: response.data.pageSize,
total: response.data.total,
},
},
}),
])
- 同时执行多个 effects 并阻塞, 使用put.resolve
yield all([
put.resolve({
type: 'getTaxList',
payload,
}),
put.resolve({
type: 'getCaseList',
payload,
}),
])