我无法证实这是否有效,但我怀疑会有效。你可以改变你的
setState
内部调用
dispatch
到回调窗体,该窗体允许您在将现有状态传递到reducer之前引用该状态。
export default (reducer, persistKey, onRehydrate) => {
let initialState = rehydrate(persistKey)
if (onRehydrate && typeof onRehydrate === 'function') {
initialState = onRehydrate(initialState)
}
const [state, setState] = useState(initialState)
function dispatch (action) {
setState(prevState => { // Use callback form here.
const nextState = reducer(prevState, action)
persist(nextState, persistKey)
return nextState
});
}
return [state, dispatch]
}