Redux 组合传感器和状态的形状
在本报告中,声明: 典型应用程序的状态形状大致如下: 或 现在我使用的是Redux 组合传感器和状态的形状,redux,Redux,在本报告中,声明: 典型应用程序的状态形状大致如下: 或 现在我使用的是combinereducer,我需要知道如何实现这种结构 考虑到combineReducers的行为,即在状态下为传递给combineReducers的每个减速器设置相应的键 我是否必须为domainData1、domainData2、appState1、appState2和ui创建一个缩减器? 或者有其他方法来定义这样的状态形状? 是否可以禁用组合减速器将每个减速器的键添加到状态的行为 combinereducer获取一个
combinereducer
,我需要知道如何实现这种结构
考虑到combineReducers
的行为,即在状态下为传递给combineReducers
的每个减速器设置相应的键
我是否必须为domainData1、domainData2、appState1、appState2和ui创建一个缩减器?
或者有其他方法来定义这样的状态形状?
是否可以禁用组合减速器将每个减速器的键添加到状态的行为
combinereducer
获取一个对象,该对象中充满了切片缩减器函数,并且
创建一个函数,该函数使用
同样的钥匙
这是联合收割机减速器的定义
我是否必须为domainData1、domainData2、appState1、appState2和ui创建一个缩减器?
是,为每一个定义减速器,并为每一个定义减速器。
比如:
{
domainData1:domainData1Reducer,
domainData2:domainData2Reducer,
appState1:appState1Reducer,
appState2:appState1Reducer,,
ui:uiReducer
}
是否可以禁用组合减速器将每个减速器的键添加到状态的行为
不,用联合收割机减速机你不能。但是您可以为此编写实现
或者有另一种方法来定义这样的状态形状?
是的,我们也可以在单减速器中进行此操作。如果您愿意。这就是我所做的:
// don't provide keys to reducers that don't supply them
const filterReducer = (reducer) => {
let lastState = undefined;
return (state, action) => {
if (lastState === undefined || state == undefined) {
lastState = reducer(state, action);
return lastState;
}
var filteredState = {};
Object.keys(lastState).forEach( (key) => {
filteredState[key] = state[key];
});
var newState = reducer(filteredState, action);
lastState = newState;
return newState;
};
}
首先,我创建了simpleDomainData1
,simpleDomainData2
,entityType1
,entityType2
,以及uiSection1
和uiSection2
然后我将entityType1和entityType2组合如下:
const entities = combineReducers({
entityType1,
entityType2,
});
const ui = combineReducers({
uiSection1,
uiSection2,
})
{
simpleDomainData1: {....},
simpleDomainData2: {....},
entities : {
entityType1 : {....},
entityType2 : {....}
},
ui : {
uiSection1 : {....},
uiSection2 : {....},
}
}
或者,您可以创建自己的combineReducers函数并使用该函数:
const entities = (state, action) => {
entityType1: entityType1(state.entityType1),
entityType2: entityType2(state.entityType2)
}
const ui = (state, action) => {
uiSection1: uiSection1(state.uiSection1),
uiSection2: uiSection2(state.uiSection2)
}
在那之后:
const allReducers = combineReducers({
simpleDomainData1,
simpleDomainData2,
entities,
ui
});
现在,状态形状将如下所示:
const entities = combineReducers({
entityType1,
entityType2,
});
const ui = combineReducers({
uiSection1,
uiSection2,
})
{
simpleDomainData1: {....},
simpleDomainData2: {....},
entities : {
entityType1 : {....},
entityType2 : {....}
},
ui : {
uiSection1 : {....},
uiSection2 : {....},
}
}
你能提供一个你想做什么的例子吗,更具体地说?您可以使用和不使用
combinereducer
来实现此状态对象,因此您的要求有点混乱。我想这样构造我的应用程序的状态:{simpleDomainData1:{…},simpleDomainData2:{…}实体:{entityType1:{…},entityType2:{…}UI:{uiSection1:{…},uiSection2:{…}是的,但哪一个是减速器?您可以将每个reducer视为一个状态对象,因此,combinereducer
允许您将它们组合在一个名称下,您可以选择这个名称。