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



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

我的想法是在中间件内部做到这一点,但是当带有fetch()的操作到达那里时,有效负载已经是一个承诺。

所以我的问题是,什么时候fetch()已经被执行?

如果重要的话,那么我的代码大致如下:

父行动:

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

我的行动:

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

我的post方法:

 {
   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
    );
  };
}

我的想法是在中间件内部做到这一点,但是当带有fetch()的操作到达那里时,有效负载已经是一个承诺。

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

回复你的评论:

当你调用一个动作创建器时,它当然会立即被调用。当您调用调度时,它将执行函数(如果使用redux-thunk)。现在,由于redux-thunk是一个中间件,它的执行取决于您附加中间件的顺序。因此,如果您在redux之前将自己的中间件放在设置中,它将在它之前执行。

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

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

最新更新