【发布时间】:2018-12-28 09:54:43
【问题描述】:
我对 redux saga 有一个 UPDATE_DATE 操作。 每次修改 Date 时,我都想更新多个资源。我想实现一个侦听器来触发回调的操作 UPDATE_DATE_SUCCESS。任何的想法?如果我可以从 React 组件中调用它,那就太好了。
行动: 更新日期 UPDATE_DATE_SUCCESS UPDATE_DATE_FAILURE
export const {
updateDate,
OnDateChange,
} = createActions({
[ActionTypes.UPDATE_DATE]: (date) => date,
});
传奇
export function* updateDate(newDate) {
console.log('from sagas to reducer', newDate); // eslint-disable-line no-console
try {
yield put({
type: ActionTypes.UPDATE_DATE_SUCCESS,
payload: newDate,
});
} catch (err) {
/* istanbul ignore next */
yield put({
type: ActionTypes.UPDATE_DATE_FAILURE,
payload: err,
});
}
}
export default function* root() {
yield all([
takeLatest(ActionTypes.UPDATE_DATE, updateDate),
takeEvery(ActionTypes.UPDATE_DATE_SUCCESS, test),
]);
}
React 组件的理想实现
componentDidMount() {
const { dispatch } = this.props;
dispatch(onDateChange((newDate) => {
dispatch(getApps(newDate));
dispatch(getPlatforms(newDate));
dispatch(getNetworks(newDate));
dispatch(getCountries(newDate));
dispatch(getFormats(newDate));
dispatch(getDevices(newDate));
dispatch(getNetworkKeys(newDate));
}));
}
有什么帮助吗?谢谢!
【问题讨论】:
-
为什么不在
saga中链接多个dispatches来判断成功或失败? -
因为资源依赖于当前视图。为了保存不需要的查询,最好只动态触发特定的查询。
-
虽然你可以神奇地传递一个观察者/通道来实现这一点,但这并不是你应该在 sagas 中使用的模式。我建议每个部分/视图都有一个传奇,每个视图都处理自己的调度。您可以在视图的挂载/卸载时运行/停止此类 saga,也可以在应用启动时运行它并在其中设置诸如 (currentSection === thisSection) 之类的条件。
标签: javascript reactjs redux redux-saga