redux-saga,网络上的呼叫功能是否完整?

时间:2018-02-10 19:59:30

标签: 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 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) {
   }
 }

我可以想出两种方法来做到这一点,并想知道一个人是否优先于另一个或者是否有更好的方式?

  • 方法1:
    我将组件包含在动作有效负载中,以便我可以调用方法

  • 方法2:
    on action.response.action_type_success,改变redux状态。
    然后,组件componentWillReceiveProps比较状态变量是否发生变化并调用方法

1 个答案:

答案 0 :(得分:1)

第二个。你正在使用redux-saga来处理副作用,所以保持这种方式。您可以将action回调添加到action1,但我不会混合概念。

如果您在成功时更新商店,它将重新呈现该组件,正如您所说,您可以检查 componentWillReceiveProps 中新更新的道具并触发该功能,但是,请检查nextProps而不是此.props(但我打赌你已经知道了)。

这样一切都以一种方式流动,没有回调地狱:) +你可以通过传递道具轻松测试组件。

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