私は比較的大規模なウェブアプリケーションを作成していますが、react + reduxを使用しており、店舗を扱うのは本当に混乱しています。Redux - スプレッド演算子を使用して深くネストされたストアの小道具を更新する
私は店でネストされたプロパティを更新して問題を思い付いたと私はこのような何かを行う必要があることを示しReduxのドキュメントのImmutable Update Patternsセクションが見つかりました:
function updateVeryNestedField(state, action) {
return {
....state,
first : {
...state.first,
second : {
...state.first.second,
[action.someId] : {
...state.first.second[action.someId],
fourth : action.someValue
}
}
}
}
}
をそして、私はそうやったし、その結果、私の減速のいくつかの部分は次のように探しています:
.
.
.
case "CHANGE_RANGED_INPUT": {
return {
...state,
searchPanel: {
...state.searchPanel,
[action.payload.category]: {
...state.searchPanel[action.payload.category],
rangedInputs: {
...state.searchPanel[action.payload.category].rangedInputs,
[action.payload.type]: {
...state.searchPanel[action.payload.category].rangedInputs[action.payload.type],
[action.payload.key]: {
...state.searchPanel[action.payload.category].rangedInputs[action.payload.type][action.payload.key],
value: action.payload.value
}
}
},
}
},
}
}
.
.
.
私はあなたが私のコードは、それがあるべきより多くの混乱になっていることに同意しますね。私の質問は、redux docsが推奨する方法のパフォーマンスに関するものではありません(私の場合、ほぼ毎秒派遣されるアクションのための多くの仕事のように感じますが)。
私の質問は私のコードの読みやすさです。私の還元剤をきれいにする方法はありますか?
実際に私の巨大なフォームの一部にはreact-redux-formを使用しています。このライブラリが提供するすべての機能が必要なわけではなく、その1つの機能を使用する必要があります。このライブラリーでは、ネストされたものがたくさんある巨大なフォームモデルを作成することができます。事前に定義されているonChangeイベントとその関連値の更新を取得するために、モデルルートを入力に追加するだけです。
このライブラリは、スプレッドオペレータを使用していますか?
入力に一部のインデックスを追加し、入力値が変更されたときにそのインデックスで関連する値をそのインデックスで更新できるような方法はありますか?
あなたのデータの形が単純に入れ子になっていて便利に操作できるように思えます。 reduxドキュメントで "Normalizing state shape"を読んで、状態をより便利な形に再構成できるかどうかを確認してください。 http://redux.js.org/docs/recipes/reducers/NormalizingStateShape.html –
@ DavidL.Walshと同様に、あなたの状態の形状を正規化することを検討したいかもしれません。また、[ImmutableJS](http://redux.js.org/docs/recipes/reducers/NormalizingStateShape.html)は、このようなネストされた構造を扱うのに役立つと言われています。私はまだあなたがそのライブラリを試してみる前にあなたの状態を正常化するべきだと思います。 – DonovanM
ご意見ありがとうございます。私は確かに私の店の形を再考します。私はまた、次のような行に気付きました。「明らかに、ネストの各レイヤーによって、これを読みにくくし、間違いを起こす機会が増えます。これは、状態を平坦に保ち、可能な限り減速機を構成することを奨励される"私はいくつかの減速機を複数の減速機に分割しなければならないと思う。 – Taxellool