メイン州を必要なだけ多くのウィザード状態に分割し、それぞれのアクションとともにウィザードIDを送信して、どちらのタスクに対処するかを知ってください。
としては、Array
{
wizards: [
{ id: 'A', state: true },
{ id: 'B', state: false },
{ id: 'C', state: true }
]
}
あなたは、単一のウィザードの状態を軽減する方法を理解して、ウィザードの減速を書くことができます。
function wizardReducer(wizard, action) {
switch(action) {
case 'TOGGLE':
return {
id: wizard.id,
state: !wizard.state
};
default:
return wizard;
}
}
そして、ウィザードのリストを削減する方法を理解しているwizardsReducer
を書きます。
function wizardsReducer(wizards, action) {
return wizards.map(function(wizard) {
if(action.id == wizard.id) {
return wizardReducer(wizard, action);
} else {
return wizard;
}
});
}
最後に、このwizardsReducer
へwizards
プロパティの代表者の責任ルート減速を作成するためにcombineReducers
を使用しています。オブジェクト
として
combineReducers({
wizards: wizardsReducer
});
あなたの代わりにオブジェクトであなたのウィザードを保存している場合は、少し違ったあなたwizardsReducer
を構築する必要があります。
{
wizards: {
A: { id: 'A', state: true },
B: { id: 'B', state: false },
C: { id: 'C', state: true }
}
}
私たちがすぐに必要な状態を選択するだけで、状態をマップするのはあまり意味がありません。
function wizardsReducer(wizards, action) {
if(!(action.id in wizards)) return wizards;
const wizard = wizards[action.id];
const updatedWizard = wizardReducer(wizard, action);
return {
...wizards,
[action.id]: updatedWizard
};
}
私の反応成分が一意のIDを生成すべきか?どこにIDを格納/スコープしますか?コンポーネントの状態で?コンポーネントのマウント/アンマウントで起動されるCREATE/DESTROYのアクションが必要ですか? –
これらの質問の多くは、アプリケーションの個々のウィザードの有効期間と目的によって異なります。ウィザード状態とウィザードコンポーネントの間に本当に1対1の関係がある場合、それらの提案はすべて合理的です。 –
私はこれを少し簡単にする良いreduxライブラリを見つけました。そこにも他の人がいます。 https://github.com/tonyhb/redux-ui –