使用 redux 存储规范化数据
storing normalized data with redux
我希望我的 reducers 在状态中填充一个根对象,独立于它们操作的状态片。
我发现很多页面都在解释 normalizr 有多棒,但是没有人解释在何处以及如何存储这些规范化数据。
问题是:
我是不是在尝试做一些不寻常和错误的事情?
我如何修改根状态对象中的状态,因为 reducer 只对数据的一部分进行操作。
so 视频减速器:
const videos = (state, action) => {
switch (action.type) {
case 'LOAD_VIDEOS': {
return ....
}
}
}
不仅应使用标准化数据填充 state.videos
(使用视频 ID 数组),还应使用 state.database.videos
(如果视频包含其他实体,则使用其他键)。
如果你的 reducer 需要处理多个状态,给它整个状态。
如果你正在使用 combineReducers()
,你可以将它包装起来,这样你就可以保留组合减速器的优势,你仍然可以拥有一个在完整状态下工作的减速器:
function somePartOfState(state, action) {
// ...
}
function otherPartOfState(state, action) {
// ...
}
function fullState(state, action) {
// ...
}
const combined = combineReducers({
somePartOfState,
otherPartOfState
});
export function rootReducer(state, action) {
// call the combined reducers,
// then pass the resulting state to the fullState reducer
return fullState(combined(state, action), action);
}
我希望我的 reducers 在状态中填充一个根对象,独立于它们操作的状态片。
我发现很多页面都在解释 normalizr 有多棒,但是没有人解释在何处以及如何存储这些规范化数据。
问题是:
我是不是在尝试做一些不寻常和错误的事情?
我如何修改根状态对象中的状态,因为 reducer 只对数据的一部分进行操作。
so 视频减速器:
const videos = (state, action) => {
switch (action.type) {
case 'LOAD_VIDEOS': {
return ....
}
}
}
不仅应使用标准化数据填充 state.videos
(使用视频 ID 数组),还应使用 state.database.videos
(如果视频包含其他实体,则使用其他键)。
如果你的 reducer 需要处理多个状态,给它整个状态。
如果你正在使用 combineReducers()
,你可以将它包装起来,这样你就可以保留组合减速器的优势,你仍然可以拥有一个在完整状态下工作的减速器:
function somePartOfState(state, action) {
// ...
}
function otherPartOfState(state, action) {
// ...
}
function fullState(state, action) {
// ...
}
const combined = combineReducers({
somePartOfState,
otherPartOfState
});
export function rootReducer(state, action) {
// call the combined reducers,
// then pass the resulting state to the fullState reducer
return fullState(combined(state, action), action);
}