2016-10-04 7 views
2

私のアプリでは、何か注文する必要があります。順序は形をしており、約20のプロパティは、静的なものもあれば、計算されたものもあります。ReactとReduxでデータモデルをどこに置くべきですか?

私のCartComponent.jsxには、今後の使用のために注文を保存するメソッドsaveOrderがあります。 オーダーモデルとしてプレーンオブジェクトを使用します。

今すぐ注文を確定するかキャンセルできます。確認後、authorizeOrderアクションをストアにディスパッチします。その後、ユーザーは何らかの形で注文を確認しなければならず(SMS、トークンなど)、注文が行われます。したがって、フローは オーダーの保存 - >オーダーの確認 - >オーダーの承認(他のコンポーネント内) - >オーダーの送信(承認後)です。

私の質問は次のとおりです。それは秩序モデルを意味しますか? authorizeOrderアクションで作成する必要がありますか?それともコンポーネントはそれでいいですか?またはorderModel.jsで注文ファクトリークラスまたはオーダークラスを公開する必要がありますか?

+0

[OK]を、ので、私は内部の別々のディレクトリにmaのロジックを維持することを決定しましたモジュールディレクトリ。私はモジュール "支払い"を持って、そこに私は "モデル"ディレクトリを作成しました(まあ...私は良い名前を見つけることができません)とそこに私は "orderFactory.js" 私は今この工場を私の減量主体の初期状態として使うことができますし、私のアクションクリエイターはバックエンドにフルオーダーを送ることができます。 私のレデューサーは純粋なままで、アクションクリエイターはビジネスロジックを処理します(注文にタイムスタンプを追加し、パラメーターを並べ替えるなど)。 – kzg

答えて

2

Reduxを使用しているので、それを保管しないでください。

CreateOrderは、作成され、ストアに追加されるオブジェクトのパラメータを順番に受け入れます。

Reactコンポーネントは、ReactにフィードバックされるReduxにディスパッチする必要があります。例えばので

(私が正しく質問を理解している場合):ストア内

MyReactComponent = React.createElement({ 
... 
saveOrder: function(e) { //assuming it is a button 
    var myOrderObject = { 
     //properties... 
    } 
    this.props.createOrder(myOrderObject); 
} 
..... 
}); 

var mapStateToProps = function (state) { 
    return { 
     orders: state.orders 
    }; 
} 

var mapDispatchToProps = function (dispatch) { 
    return { 
     createOrder: function (properties) { 
      dispatch(myService.create(properties)); 
     } 
    } 
}; 
module.exports = ReactRedux.connect(mapStateToProps, mapDispatchToProps)(MyReactComponent); 

次に、あなたがサービス

に送信したものに比較して、キーとディスパッチ関数にオブジェクトを作成します
//myService 
var load = function (data) { 
    return function (dispatch, getState) { 
     dispatch({ 
      type: "createOrderKey", 
      payload: data 
     }); 
    }; 
}; 
あなたの減速で

function updateReducer(state, action) { 
    var newstate; 
    switch (action.type) { 
     case "createOrderKey: 
      //clone state to newState 
      //create and add the object 
      return newstate; 
     default: 
      return state; 
    } 
}; 
+0

あなたの助言はreduxを使用することです。 OK。しかし、myServiceは何ですか?それは何らかのアクションクリエイターのように見えますが、そうですか? – kzg

+0

あなたのサービスは基本的に 'dispatch'関数を実行するためのjavascriptファイルです。例えば、' ajax'呼び出しを使ってサーバと話すことができます。特にない。 – Tikkes

+0

私は非同期アクションを送出するためにredux thunkを持っています(彼らはバックエンドとのコンカレーションを処理しますが、私のプロジェクトmyService.jsの機能はactions.jsにあります)。 – kzg

関連する問題