什么时候在Redux中发生fetch()?

时间:2016-08-09 10:43:19

标签: reactjs redux redux-thunk

我在控制fetch()函数的执行方面遇到了问题。特别是我想避免让用户发送垃圾邮件fetch()请求。

我的想法是在中间件中执行此操作,但是当使用fetch()的操作到达那里时,有效负载已经是一个承诺。

所以我的问题是,fetch()到底是什么时候执行的?

如果重要,那么我的代码看起来大致如此。

父母行动:

{
  return (dispatch) => {
    if (mode === 'MY') {
      dispatch(myAction(...);
    }

    dispatch(someOtherAction(...));
  } 
}

我的行动:

{
  type: 'TYPE',
  promise: post(url, payload)
}

我的帖子方法:

 {
   console.log('sending POST');

   return fetch(url, {
     //fetch info
   });
 }

我的中间件:

{
  return next => action => {

    const { promise, //other fields } = action;
    //Already a promise here.

    if (!promise) {
      return next(action);
    }

    return promise.then(
      //Processing data
    );
  };
}

1 个答案:

答案 0 :(得分:0)

  

我的想法是在中间件中执行此操作,但是当使用fetch()的操作到达那里时,有效负载已经是一个承诺。

要解决这个问题,我会在行动中检查一下。因此,当您触发提取请求时,调度当前正在执行提取的操作,将状态更新为fetching = true。然后在需要使用fetch的任何其他操作中,检查该状态,如果它是真的则不返回任何内容。

回答你的评论:

当你打电话给一个动作创建者时,当然会立即调用它。当你调用dispatch时,它将执行该函数(如果使用redux-thunk)。现在,由于redux-thunk是一个中间件,它会根据你附加中间件的顺序执行。因此,如果您在redux thunk之前将自己的中间件放在设置中,它将在它之前执行。

const store = createStore(
  combineReducers(reducers),
  applyMiddleware(yourMiddleware, ReduxThunk)
);

否则你的理解是正确的。调用调度后立即触发一个动作,它将按顺序通过中间件,然后将动作信息传递给减速器。