使用 redux 存储规范化数据

storing normalized data with redux

我希望我的 reducers 在状态中填充一个根对象,独立于它们操作的状态片。

我发现很多页面都在解释 normalizr 有多棒,但是没有人解释在何处以及如何存储这些规范化数据。

问题是:

  1. 我是不是在尝试做一些不寻常和错误的事情?

  2. 我如何修改根状态对象中的状态,因为 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);
}