redux-offline 在执行提交或回滚操作时忽略中间件
redux-offline ignore middlewares when executing commit or rollback actions
如 https://github.com/redux-offline/redux-offline/pull/178#issuecomment-408795302, we are trying to use with redux-offline 所示,一个中间件可以在其对应部分 commit
或 rollback
执行后分派新操作。重点是这些没有派发,经过调试,我们发现在派发初始动作时,中间件被用作 dispatch()
函数(可能是由于 redux composeEnhancers()
和 applyMiddleware()
函数有效,因为它们是链接函数),但是当调度 commit
动作时,它是直接使用存储 dispatch()
方法完成的,因此根本没有执行任何中间件。
我们不完全确定这是我们这边关于 redux-offline
配置的错误,还是 redux-offline
本身的错误......我们的商店配置是这样的:
import { applyMiddleware, compose, createStore } from 'redux'
import reduxOfflineThunkMiddleware from './thunk-middleware'
import rootReducer from '../../reducers'
import { createUser } from '../../actions/user'
const initialState = {}
const windowCompose = (typeof window !== 'undefined') && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
const composeEnhancers = windowCompose || compose
const store = createStore(
rootReducer,
initialState,
composeEnhancers(
applyMiddleware(reduxOfflineThunkMiddleware({ createUser })),
offline()
)
)
是的,offline
和applyMiddleware
都是"store enhancers"。当您调用 store.dispatch
时,操作序列将是:
- 由中间件管道中的所有中间件处理
- 已处理
offline
- 店铺自理
因为 offline
增强器在 applyMiddleware
增强器之后,它在内部调度的任何操作都不会通过中间件管道。
如 https://github.com/redux-offline/redux-offline/pull/178#issuecomment-408795302, we are trying to use with redux-offline 所示,一个中间件可以在其对应部分 commit
或 rollback
执行后分派新操作。重点是这些没有派发,经过调试,我们发现在派发初始动作时,中间件被用作 dispatch()
函数(可能是由于 redux composeEnhancers()
和 applyMiddleware()
函数有效,因为它们是链接函数),但是当调度 commit
动作时,它是直接使用存储 dispatch()
方法完成的,因此根本没有执行任何中间件。
我们不完全确定这是我们这边关于 redux-offline
配置的错误,还是 redux-offline
本身的错误......我们的商店配置是这样的:
import { applyMiddleware, compose, createStore } from 'redux'
import reduxOfflineThunkMiddleware from './thunk-middleware'
import rootReducer from '../../reducers'
import { createUser } from '../../actions/user'
const initialState = {}
const windowCompose = (typeof window !== 'undefined') && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
const composeEnhancers = windowCompose || compose
const store = createStore(
rootReducer,
initialState,
composeEnhancers(
applyMiddleware(reduxOfflineThunkMiddleware({ createUser })),
offline()
)
)
是的,offline
和applyMiddleware
都是"store enhancers"。当您调用 store.dispatch
时,操作序列将是:
- 由中间件管道中的所有中间件处理
- 已处理
offline
- 店铺自理
因为 offline
增强器在 applyMiddleware
增强器之后,它在内部调度的任何操作都不会通过中间件管道。