2017-04-26 19 views
0

私は単純なReact Appを持っています。ユーザーはフォームを編集してデータベース内のデータを更新できます。送信すると、フォームデータを含むアクションが生成されます。 Redux Sagaは、アクションを実行し、データベースを非同期に更新します。これはすべて動作します。Redux-Sagaの状態変更

しかし、1つのケースでは更新がやや複雑です。新しいデータを追加するだけでなく、フォーム上で削除されたデータは、一連のAPI呼び出しでデータベースから削除する必要があります。これを行うには、新しい状態ではなく、変更されたもの(削除されたものなど)を知る必要があります。

私のサガはこの情報にどのようにアクセスできますか?それは前の状態へのアクセスを持っているので、私は減速機でそれを計算することができましたが、それは一般的に減速機のためのアンチパターンであることが新しいアクションをディスパッチするために開催されます。

+0

私のブログの記事にいくつかの関連する概念を議論?フォームを編集するときにそれを更新していますか?このような特別な理由はありますか? –

+0

はい、非同期呼び出しによってアクセスされるサーバー上のデータベースです。フォームが編集されたときではなく、フォームが送信されるときに更新されます。別の方法がありますか?おそらく、私は完全に間違った方向から来ているでしょう。 – amay

+0

フォームの中間状態をサーバーに送信しないと、それらを削除する必要はありません。それらはあなたの地元の州にのみあります。それらを破棄し、フォームの最終状態のみを送信することができます。それが私が想定しているサーバーに関係するものです。おそらく、達成しようとしている方法にいくつかのコードを追加することができます。また、どのライブラリを使用していますか?還元型のようなもの? –

答えて

1

サガースにはselectというエフェクトがあり、これはセレクタ機能を実行して抽出された状態を返します。あなたはReduxのストアから古いものと新しいアイテムを取得するためにこれを使用し、そこからの変化に対応することができます

function* handleFormUpdates() { 
    const oldItem = yield select(selectOldItem); 
    const newItem = yield select(selectNewItem); 

    const changes = diffTheItems(oldItem, newItem); 

    // make API calls to deal with changes appropriately 
} 

全体的に、これは中に「一時的」または「ドラフト」状態を維持するための良い理由がありますReduxを使用して、ロジック内の「現在」と「下書き」の両方の値を使用することができます。

私はあなたがデータベースを言うとき、それはサーバー上のデータベースを意味しているのPractical Redux, Part 7: Form Change Handling, Data Editing, and Feature ReducersPractical Redux, Part 8: Form Draft Data Management

+0

これは問題だと思います。私はReduxストアに古い状態を持っていません。私がやろうとしていたことは、ストア内のデータをデータベースに書き込む方法から切り離し、必要に応じてビューに影響を与えずにデータベースAPIを変更できるということでした。あなたの記事へのリンクをありがとう、私はすべてをそれらを見通すために読む必要があるかもしれませんが。 – amay