3

我希望我的减速器在状态中填充根对象,独立于它们操作的状态切片。

我发现很多页面都在解释 normalizr 的美妙之处,但没有人解释在哪里以及如何存储这些标准化数据。

问题是:

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

  2. 我如何修改根状态对象中的状态,因为减速器只对数据片段进行操作。

所以视频减速器:

const videos = (state, action) => {
  switch (action.type) {  
    case 'LOAD_VIDEOS': {
      return ....
    }
  }
}

不仅应该填充state.videos(使用视频 id 数组),还应该state.database.videos使用标准化数据填充(以及其他键,如果视频包含其他实体)。

4

1 回答 1

3

如果你的 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);
}
于 2016-04-12T18:04:24.997 回答