我正在扩展仅限本地的 React 应用程序的功能以连接到 API。这是我重构之前的代码。您会看到我正在从全局窗口变量 INIT_STATE 设置初始状态,该变量还包括一些其他根级对象。
我专注于这些根级对象之一,称为“项目”。
对于项目减速器,我正在规范化(使用 normalizr)这样的状态并组合减速器以获得规范化实体的使用减速器:
window.PROJECTS_STATE = fromJS(normalize(window.INIT_STATE.projects, projectsSchema));
const result = (state = window.PROJECT_STATE.get('result'), action) => {
switch (action.type) {
default:
return state;
}
};
// In these reducers, currently, I'm getting init_state from window.PROJECTS_STATE
// i.e. window.PROJECT_STATE.entities.projects), which has been normalized above
const entities = combineReducers({
projects,
items,
events,
});
// Here is where I'd like to handle an action to normalize and
// overwrite the state of `projects` and all it's sub-reducers
export default () => combineReducers({
entities,
result,
});
在我的重构中,我已经分派了操作以在我的顶级容器中获取和接收 API 请求。GET_REQUEST_SUCCESS
我可以通过处理这些减速器中的操作以返回响应的那部分,轻松地设置其他根级对象的初始状态,而不是以前在 INIT_STATE中的状态,但是由于projects
已标准化并具有嵌套的子减速器,我不确定如何使用 combineReducers 设置此状态。
所以最终,我希望能够组合减速器,同时处理一个可以覆盖其所有子减速器状态的操作。这是可能的还是有更好的方法来解决这个问题?
非常感谢。