Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 创建一个Redux传奇监听器_Javascript_Reactjs_Redux_Redux Saga - Fatal编程技术网

Javascript 创建一个Redux传奇监听器

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

我有一个关于redux传奇的最新行动。 每次修改日期时,我都要更新多个资源。我想实现一个监听器来触发回调的操作更新_DATE _SUCCESS。有什么想法吗?如果我能从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)等条件。谢谢!成功了。比我希望的还要干净!很乐意帮忙。干杯非常感谢。成功了。比我希望的还要干净!很乐意帮忙。干杯