Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.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
Reactjs redux传奇,网络调用功能完成?_Reactjs_Redux_Redux Saga - Fatal编程技术网

Reactjs redux传奇,网络调用功能完成?

Reactjs redux传奇,网络调用功能完成?,reactjs,redux,redux-saga,Reactjs,Redux,Redux Saga,我想在网络获取完成时调用组件的函数 function callRestApi({config, schema}) { return axios(config).then((response) => { if (schema) { var data = normalize_json(response.data, schema) response.entities = data.entities } return respon

我想在网络获取完成时调用组件的函数

function callRestApi({config, schema}) {
   return axios(config).then((response) => {

     if (schema) {
       var data = normalize_json(response.data, schema)
       response.entities = data.entities
     }

     return response
   })
 }

 function* fetchEventList(action) {
   try {
     const response = yield call(callRestApi, action.payload);
     // here I want to call a component's method if possible
     yield put({type: action.response.action_type_success, response});
   } catch (e) {
   }
 }
我可以想出两种方法来做到这一点,不知道是一种方法比另一种更可取,还是有更好的方法

  • 方法一:
    我将组件包括在操作负载中,以便调用该方法

  • 方法二:
    在action.response.action\u type\u success上,更改redux状态。
    然后,组件的
    组件将接收props
    比较状态变量是否更改并调用该方法


    • 第二个。您正在使用redux传奇来处理副作用,所以请保持这种方式。您可以将回调作为method1添加到操作中,但我不会混淆概念

      如果成功更新存储,它将重新呈现组件,正如您所说,您可以在组件中检查最新更新的道具将接收道具并触发该功能,但是,请检查nextProps而不是this.props(但我敢打赌您已经知道这一点)

      这样,一切都是单向的,没有回调:)+只需传递一个道具,就可以轻松测试组件


      虽然这本身不是一个坏模式,但传递回调将是双向流,这打破了流量的第一条规则:单向流。

      感谢您给出了明确的答案,为什么第一个方法会导致双向流?因此在流量中,如果传递回调,它是这样的:查看->操作->调度程序->存储->查看,它转到查看操作->调度程序,因为它正在破坏单向流。看看这里,我想你会很好地理解它:对不起,我指的是双向流(不是数据流),谢谢,我理解它是什么,尽管doc没有说为什么它很重要。也许这更能说明问题: