2017-01-28 9 views
2

React Reduxプロジェクトでは、コンポーネントItemはコンポーネントProductCategoryの封じ込めとして機能します。 Itemは、常にクリックイベントをリッスンする必要がありますが、その内容に応じてイベントを処理する必要があります。Productが含まれている場合はCategoryが含まれている場合はADD_TO_CARTOPENを送出する必要があります。React Redux:カーテンアクションを定義する場所について混乱しています

現在、非同期APIリクエストを処理している製品とカテゴリのアクションクリエイターは、redux-thunkaxiosとしています。 OPENADD_TO_CARTはこれらのアクションクリエイターの一部であるか、この機能はボードのアクションクリエイターに属していますか?そしてどの減量兵がこれらの行動を処理すべきか?

答えて

1

この質問は、あなたのレデューサーのアーキテクチャを言及していないという意味では、あなたが提供している現在の範囲を超えて、いずれにせよ、の部分で手放す:

はOPENとADD_TO_CART万一これらのアクションクリエイターの一部であるか この機能はボードのアクションクリエイターに属していますか?

私は完全にあなたがboard'sアクションの作成者によって何を意味するか理解していないが、私は、ex、それらは、単一のクリエイターに連結されている場合、それは行動を推論するためにはるかに簡単であると信じて:

function addToCart(item) { 
    return dispatch => dispatch({type: ADD_TO_CART, item}) 
} 

異なるクリエイターが同じアクションを送信するよりも、どのクリエイターがどのアクションをディスパッチしたかが完全にはわからない可能性があるため、コードをデバッグするのが難しくなりますので、私の提案は1クリエーター→1アクションです。

また、アクションクリエーターをコンポーネントに接続するときは、実際に何が起こっているかを実行時にコードをデバッグする必要がないように、可能な限り明確にアクションを実行してください。

if(this.props.isItem) { 
    this.props.addToCart(this.props.item); 
} else { 
    this.props.open(this.props.category); 
} 

コードはわかりやすく、実行時に奇妙な動作を防止します。

これらの処理をどの減速器で処理する必要がありますか?

これは私があなたの減速の現在の構造を知っているが、一般的に右のアーキテクチャを選択することは常に困難であるが、一般的なガイドラインとして、私は言うだろうしていないではないという理由だけで、非常に厳しい質問です:

Always split your reducers to sub-domains of your problem 

OPENというアクションがあります。これは実際には縮小モデルをビューモデルとして使用していると思うようになりますが、実装の詳細にも依存します。

ビューモデルレデューサーは私の意見では非常に便利ですが、あなたがアクションOPENを持っている場合は、項目情報だけでなく、このレデューサーのアプリケーションビューの状態も私はITEM_OPENに名前を変更します。OPENアクションを作成する場合は、openのアイテムを保存して、減速機が実際にアプリケーションで新しい状態を生成するように、別のサブドメインのアクションをOPENにすることもできます。

私はOPENアクションを削除するには、反応ルータや同様のアクションを介して単純に処理する必要があります。

あなたの制限された情報で判断すると、2つの減速機、1つはカート用、もう1つは減速機でなければなりません。ADD_TO_CARTアクションは明らかにカートレデューサーによって処理され、OPENを処理する必要がありますアイテム減速機によって。

関連する問題