これは実現できません。 combineReducers
によって作られたリデューサは、初期化キーからレデューサーのマップの一部ではないキーで状態部品をドロップします。それはあなたが経験しているものであり、それはデザインによってどのように動作するのかです。
あなた本当には、あなたのタスクを解決するためにcombineReducers
とreducerReducers
の両方に固執する必要があり、その後、あなたは3つのレデューサーを実装する必要があります場合は、次のスライスAのための1つを、それらの両方で動作しますスライスBと一対一:
const sliceA = (state, action) => state + `| ${action.type} by A`;
const sliceB = (state, action) => state + `| ${action.type} by B`;
const full = (state, action) => ({ sliceA: state.sliceA + `| ${action.type} by C`, sliceB: state.sliceB + `| ${action.type} by C` });
const reducer = reduceReducers(
combineReducers({
sliceA,
sliceB,
}),
full
);
const initialState = { sliceA: 'initial A', sliceB: 'initial B' };
const action = { type: 'touched' };
console.log(reducer(initialState, action));
// outputs:
Object {
sliceA: "initial A| touched by A| touched by C",
sliceB: "initial B| touched by B| touched by C"
}
しかし、ちょうどそれを自分で書くことが容易になることがあります:
const sliceA = (state, action) => state + `| ${action.type} by A`;
const sliceB = (state, action) => ({
sliceA: state.sliceA + `| ${action.type} by B`,
sliceB: state.sliceB + `| ${action.type} by B`,
})
const reducer = (state, action) => sliceB(
{
sliceA: sliceA(state.sliceA, action),
sliceB: state.sliceB,
},
action
)
const initialState = { sliceA: 'initial A', sliceB: 'initial B' };
const action = { type: 'touched' };
console.log(reducer(initialState, action));
// outputs:
Object {
sliceA: "initial A| touched by A| touched by B",
sliceB: "initial B| touched by B"
}