Redux 超时 thunk 错误 "Actions must be plain objects"
Redux timeout thunk error "Actions must be plain objects"
我正在使用 redux-thunk,我还想分派一些超时操作。由于某些原因(我想要一个对象中的所有超时,我希望能够取消它们,现在并不重要)我想要自定义 'timeout middleware' 和 'action enchancer'
enchancer 只会发出特殊类型的动作:
const addTimeoutToAction = (delay, action) => ({
type: 'TIMEOUT'
, delay
, action
})
中间件只是捕获它并且应该在超时结束后调度操作
({dispatch, getState}) => next => action => {
if (action && action.type === 'TIMEOUT') {
setTimeout(() => {
dispatch(action.action);
}, action.delay)
}
next(action);
}
所以我的期望是中间件中的调度函数会将操作发送回中间件链,在那里它会再次开始遍历。
我的示例代码适用于普通操作,但 thunked 操作不适用。请帮助我了解如何将延迟的操作重新路由回中间件链。
示例代码:
您的代码应该如下所示
const action3 = () => (dispatch, getState) => {
dispatch({
type: 'action3'
});
}
无论何时使用 thunk 中间件,都必须调用 dispatch 来调度操作,不能 return 一个对象。
这是更正后的代码笔:http://codepen.io/anon/pen/pEKWRK?editors=0010
希望对您有所帮助。
我正在使用 redux-thunk,我还想分派一些超时操作。由于某些原因(我想要一个对象中的所有超时,我希望能够取消它们,现在并不重要)我想要自定义 'timeout middleware' 和 'action enchancer'
enchancer 只会发出特殊类型的动作:
const addTimeoutToAction = (delay, action) => ({
type: 'TIMEOUT'
, delay
, action
})
中间件只是捕获它并且应该在超时结束后调度操作
({dispatch, getState}) => next => action => {
if (action && action.type === 'TIMEOUT') {
setTimeout(() => {
dispatch(action.action);
}, action.delay)
}
next(action);
}
所以我的期望是中间件中的调度函数会将操作发送回中间件链,在那里它会再次开始遍历。
我的示例代码适用于普通操作,但 thunked 操作不适用。请帮助我了解如何将延迟的操作重新路由回中间件链。
示例代码:
您的代码应该如下所示
const action3 = () => (dispatch, getState) => {
dispatch({
type: 'action3'
});
}
无论何时使用 thunk 中间件,都必须调用 dispatch 来调度操作,不能 return 一个对象。
这是更正后的代码笔:http://codepen.io/anon/pen/pEKWRK?editors=0010
希望对您有所帮助。