fetch() 什么时候在 Redux 中发生?
When does fetch() happen in 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
);
};
}
My idea was to do this inside of middleware, but by the time the action with a fetch() gets there the payload is already a promise.
为了解决这个问题,我会在动作中进行检查。因此,当您触发获取请求时,分派获取当前正在执行的操作,更新状态为 fetching = true
。然后在任何其他需要使用 fetch 的操作中,检查该状态,如果为真,return什么都不做。
回答您的评论:
当您调用动作创建器时,当然会立即调用。当您调用调度时,它将执行该函数(如果使用 redux-thunk)。现在,由于 redux-thunk 是一个中间件,它会根据您附加中间件的顺序执行。所以如果你把自己的中间件放在redux thunk之前的setup中,它会先于它执行。
const store = createStore(
combineReducers(reducers),
applyMiddleware(yourMiddleware, ReduxThunk)
);
否则你的理解是正确的。一个 action 在调用 dispatch 后立即触发,它会按顺序通过中间件,然后将 action 信息传递给你的 reducers。
我在控制 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
);
};
}
My idea was to do this inside of middleware, but by the time the action with a fetch() gets there the payload is already a promise.
为了解决这个问题,我会在动作中进行检查。因此,当您触发获取请求时,分派获取当前正在执行的操作,更新状态为 fetching = true
。然后在任何其他需要使用 fetch 的操作中,检查该状态,如果为真,return什么都不做。
回答您的评论:
当您调用动作创建器时,当然会立即调用。当您调用调度时,它将执行该函数(如果使用 redux-thunk)。现在,由于 redux-thunk 是一个中间件,它会根据您附加中间件的顺序执行。所以如果你把自己的中间件放在redux thunk之前的setup中,它会先于它执行。
const store = createStore(
combineReducers(reducers),
applyMiddleware(yourMiddleware, ReduxThunk)
);
否则你的理解是正确的。一个 action 在调用 dispatch 后立即触发,它会按顺序通过中间件,然后将 action 信息传递给你的 reducers。