我的 Redux 商店中有一个状态,形状如下:
type RootState = {
PAGE_A: StatePageA,
PAGE_B: StatePageB,
PAGE_C: StatePageC,
// AND SO ON...
}
每个页面都是使用createSlice
from创建的切片@reduxjs/toolkit
我正在使用 Next.js 静态生成和 SSR,因此我需要使用来自 Next.js 服务器的后续页面的新状态来补充我之前创建的商店。
无论我要路由到什么页面,我都会得到 pre-rendered pageState
,它应该是 type StatePageA | StatePageB | StatePageC
。
当新状态出现时,我需要dispatch()
一个HYDRATE_PAGE
操作,它应该替换当前页面状态。
这是我对如何处理HYDRATE_PAGE
动作的第一个想法。
export const HYDRATE_PAGE = createAction<{
pageName: "PAGE_A" | "PAGE_B" | "PAGE_C",
pageState: StatePageA | StatePageB | StatePageC
}>("HYDRATE_PAGE");
然后我必须在每一片中听它:
// EX: PAGE_A SLICE
// THIS WOULD HAVE TO BE DONE FOR EACH SLICE ON THE extraReducers PROPERTY
extraReducers: {
[HYDRATE_PAGE]: (state, action) => {
if (action.payload.pageName === "PAGE_A")
return action.payload.pageState
}
}
有没有一种方法可以集中处理它,而不必在每个切片缩减器中监听该操作?
例如:rootReducer
一种我可以监听HYDRATE_PAGE
动作并在一个地方处理它的东西,比如。
// THIS REDUCER WOULD HAVE ACCESS TO THE rootState
(state: RootState, action) => {
const {pageName, pageState} = action.payload;
state[pageName] = pageState;
};
这有可能吗?
额外的
有一个名为next-redux-wrapper 的包,但我不打算使用它。我正在尝试构建我的自定义解决方案。