在切片(redux状态)更新完成后运行一个副作用



我正在使用Redux Toolkit,我想在sessionStorage中存储切片的最新状态。我知道我可以使用store.subscribe()来处理整个状态更新,但我想要的是捕获特定的切片更新。

我能够通过在自定义钩子中使用选择器来切片来实现它。请参阅下面的代码。

在createSlice中是否有一个属性/功能可以挂接到状态更新,以便在状态更新完成后运行副作用,类似于prepare属性。


//slice
export const aliasSlice = createSlice({
name: 'alias',
initialState: initState ,
reducers: {
setAlias: (state, action) => action.payload
},
})
export const { setAlias } = aliasSlice.actions
export const selectAlias = state => state.alias
//custom hook
const useSessionStrorage = () => {
const alias = useSelector(selectAlias)
useEffect(()=>{
if(alias)
window.sessionStorage.setItem('mySessionStorageKey', alias)
},[alias])
}

不,RTK中没有这样的东西。

一般来说,我建议你不要在组件级别处理这个问题,而是在subscribe,自定义中间件或-可能是最简单的方法-使用redux-persist,它是为此目的而制作的,并且非常可配置。

在中间件中,它看起来像这样:
const myMw = api => next => action => {
const lastValue = mySelector(api.getState)
const result = next(action)
const newValue = mySelector(api.getState)
if (lastValue !== newValue) {
// do something
}
return result
}

withsubscribe:

let lastValue = mySelector(store.getState)
store.subscribe(() => {
const newvalue = mySelector(store.getState)
if (lastValue !== newValue) {
// do something
}
lastValue = newValue
})

最新更新