2017-12-29 40 views
0

TodoのタスクをReact-Reduxで選択できるようにしたいとします。 この状態はどこに保存する必要がありますか?リストの選択項目をReduxに格納するパターン

まずソリューション:タスク

第二の溶液にisActive: true attributを追加します。ただ、選択した項目のIDを処理する新しい減速を作成します。

私は両方のソリューションが嫌いです:最初の1つは、その中にタスクに無関係なものを格納しているように感じ、2番目のIDはIDを格納するために全体の減速装置を作成するために過度に感じます。

他にもオプションはありますか?何がベストですか? ありがとう

答えて

2

私はあなたのユースケースによって異なると言います。持続するUI状態のトンを持っている大きなアプリを

  1. は、それは多くの意味がUIに関連する店舗のスライスを変異させるために特別な減速を持つようになります。

  2. 複数のタスクを同時にアクティブにすることができる場合は、タスクごとにisActive: booleanプロパティが有効であることが有効です。タスクデータの観点からはタスクに関係していませんが、実際にはアプリケーションの観点から見ています。あなたのreduxストアの主な目標は、APIデータモデルをミラーリングするのではなく、アプリケーションの真実のソースになることです。

  3. 単一のタスクしかアクティブ/選択していない場合は、isActive: idとすることもできます。

  4. コンポーネントの状態を使用することもできます。これの限界は、それが持続しないことと共有されないことです。たとえば、保存ボタンを使用する場合、そのボタンは選択された状態のコンポーネント内になければなりません。

2

表示されている2つのオプションのどちらも間違っていることはありません。しかし、あなたは他のオプションを探しているなら、あなたは )は、ドスの減速状態で選択した項目を含めることができますので、あなたの状態オブジェクトは、次のようになります。

{ 
    selected: id, 
    list: [{id, text, completed}, ...] 
} 

2)ドン君場合選択したアイテムがアプリの他の場所に必要な場合は、ローカルの状態で保存するだけです。 Reduxのアプリケーション状態とローカル状態の両方を、コンポーネント内にのみ含まれているデータと混在させても問題ありません。

+0

ありがとうございます。最初のソリューションを使用する場合は、IDを変更したい場合は、新しい状態が不変であることを確認してください(同じリスト配列を参照しません) 見つけた唯一の解決策は var newState = JSON.parse (JSON.stringify(state)) newState.selected = action.id – Diogyn

+0

詳細については、https://redux.js.org/docs/recipes/reducers/ImmutableUpdatePatterns.html – Diogyn

+2

を参照してください。新しい選択されたアイテムのIDで選択した値を変更するだけで済みます。リストの配列を変更する必要はありません。アイテムを追加、削除または更新するため、リストに変更があった場合にのみ配列を変更します。この場合、その時点で選択されたアイテムが1つしかない場合、選択したアイテムを変更しても、アイテムデータ自体は変更されません。 –

関連する問題