如何组织嵌套的 Redux reducer?
How to organize a nested Redux reducer?
我的部分应用程序的减速器将进行深度嵌套
export const MainReducers = function(state = mapDataToInitialState(),
action = {}) {
switch (action.type) {
case Constants.SET_FOO:
return update(state, {
sheet: {
stream: {
appeal_0: {
issues: {
problem1: {
foo: {
$set: action.payload.foo
}
}
}
}
}
}
});
case Constants.SET_BAR:
return update(state, {
// TODO make reusable for all issues fields
sheet: {
stream: {
person: {
issues: {
problem1: {
bar: {
$set: action.payload.bar
}
}
}
}
}
}
});
default: return state;
}
};
我还有很多要补充的,我怎样才能更好地抽象对象的嵌套
我在想 return newState
之类的事情。我真的不明白 combine reducer 是否适用于这种类型的东西。 redux 文档对我来说很难理解,因此我需要一个更好的例子来说明如何组织 reducer..
谢谢
combineReducers 绝对是正确的选择。您可能还成功规范化和扁平化了您的状态,使其更易于使用。
所以你可能想做
const appReducer = combineReducers({
streams: streamReducer,
people: peopleReducer,
issues: issueReducer
});
然后您的组件可以在 mapStateToProps 中获取他们想要的各个位,而不是获取一个巨大的大对象:
function mapStateToProps( state, ownProps ) {
return {
person: state.people[ ownProps.personId ]
issues: state.issues[ ownProps.personId ]
};
}
我的部分应用程序的减速器将进行深度嵌套
export const MainReducers = function(state = mapDataToInitialState(),
action = {}) {
switch (action.type) {
case Constants.SET_FOO:
return update(state, {
sheet: {
stream: {
appeal_0: {
issues: {
problem1: {
foo: {
$set: action.payload.foo
}
}
}
}
}
}
});
case Constants.SET_BAR:
return update(state, {
// TODO make reusable for all issues fields
sheet: {
stream: {
person: {
issues: {
problem1: {
bar: {
$set: action.payload.bar
}
}
}
}
}
}
});
default: return state;
}
};
我还有很多要补充的,我怎样才能更好地抽象对象的嵌套
我在想 return newState
之类的事情。我真的不明白 combine reducer 是否适用于这种类型的东西。 redux 文档对我来说很难理解,因此我需要一个更好的例子来说明如何组织 reducer..
谢谢
combineReducers 绝对是正确的选择。您可能还成功规范化和扁平化了您的状态,使其更易于使用。
所以你可能想做
const appReducer = combineReducers({
streams: streamReducer,
people: peopleReducer,
issues: issueReducer
});
然后您的组件可以在 mapStateToProps 中获取他们想要的各个位,而不是获取一个巨大的大对象:
function mapStateToProps( state, ownProps ) {
return {
person: state.people[ ownProps.personId ]
issues: state.issues[ ownProps.personId ]
};
}