Javascript 创建一个Redux传奇监听器
我有一个关于redux传奇的最新行动。 每次修改日期时,我都要更新多个资源。我想实现一个监听器来触发回调的操作更新_DATE _SUCCESS。有什么想法吗?如果我能从React组件调用它,那就太好了 行动: 更新日期 更新日期成功 更新日期失败Javascript 创建一个Redux传奇监听器,javascript,reactjs,redux,redux-saga,Javascript,Reactjs,Redux,Redux Saga,我有一个关于redux传奇的最新行动。 每次修改日期时,我都要更新多个资源。我想实现一个监听器来触发回调的操作更新_DATE _SUCCESS。有什么想法吗?如果我能从React组件调用它,那就太好了 行动: 更新日期 更新日期成功 更新日期失败 export const { updateDate, OnDateChange, } = createActions({ [ActionTypes.UPDATE_DATE]: (date) => date, }); 传奇 React
export const {
updateDate,
OnDateChange,
} = createActions({
[ActionTypes.UPDATE_DATE]: (date) => date,
});
传奇
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));
}));
}
有什么帮助吗?谢谢大家! 我不太明白你想做什么,但是。。。如果你只是想要一个听众,为什么不订阅一个“采取行动”来收听一个特定的行动呢
function * mySuperSagaListener() {
const listener = yield take('some_action_name')
// calculate the new state here
// here
// here
// when you are done... update the state
const updateState = yield put({type: 'some_action_name_update', payload: newState})
}
然后,您的组件将只通过react redux HOC订阅状态的一部分。。。并将根据。。。如果您想从组件分派操作,只需:
dispatch({type: 'some_action_name'})
最好的 我不太明白你想做什么,但是。。。如果你只是想要一个听众,为什么不订阅一个“采取行动”来收听一个特定的行动呢
function * mySuperSagaListener() {
const listener = yield take('some_action_name')
// calculate the new state here
// here
// here
// when you are done... update the state
const updateState = yield put({type: 'some_action_name_update', payload: newState})
}
然后,您的组件将只通过react redux HOC订阅状态的一部分。。。并将根据。。。如果您想从组件分派操作,只需:
dispatch({type: 'some_action_name'})
最好的 重演传奇背后的理念是处理传奇中的动作/事件的
副作用
,而不是组件。
我认为这样做的方式应该是这样的(注意代码片段没有经过测试,仅用作参考/示例):
/-->Saga组件触发ActionTypes.UPDATE\u日期
}
}
const mapDispatchToProps=调度=>({
onDateChange:(newDate)=>调度(updateDate(newDate)),
});
导出默认连接(null,mapDispatchToProps)(MyComponent)代码>重演传奇背后的想法是处理传奇中的动作/事件而不是组件中的副作用。
我认为这样做的方式应该是这样的(注意代码片段没有经过测试,仅用作参考/示例):
/-->Saga组件触发ActionTypes.UPDATE\u日期
}
}
const mapDispatchToProps=调度=>({
onDateChange:(newDate)=>调度(updateDate(newDate)),
});
导出默认连接(null,mapDispatchToProps)(MyComponent)代码>为什么不在saga
中链接多个调度
(关于成功或失败)?因为资源取决于当前视图。为了保存不需要的查询,只需动态触发特定的查询就好了。虽然您可以神奇地传递一个观察者/通道来实现这一点,但这并不是您应该在sagas中使用的模式。我建议每个部分/视图有一个故事,每个处理自己的调度。您可以在装载/卸载视图时运行/停止这样的saga,也可以在应用程序开始时运行它,并在其中包含(currentSection==thisSection)这样的条件。为什么不在成功或失败时在saga
中链接多个调度呢?因为资源取决于当前视图。为了保存不需要的查询,只需动态触发特定的查询就好了。虽然您可以神奇地传递一个观察者/通道来实现这一点,但这并不是您应该在sagas中使用的模式。我建议每个部分/视图有一个故事,每个处理自己的调度。您可以在装载/卸载视图时运行/停止此类saga,也可以在应用程序开始时运行它,并在其中设置(currentSection==thisSection)等条件。谢谢!成功了。比我希望的还要干净!很乐意帮忙。干杯非常感谢。成功了。比我希望的还要干净!很乐意帮忙。干杯