2016-10-19 1 views
4

enter image description here突然変異後、影響を受けたデータをビュー間でどのように更新すればよいですか?

私はgetMoviesクエリとaddMovie変異作業の両方を持っています。 addMovieが起きたとき、私は「Edit Movies」と「My Profile」のムービーのリストを更新して、その変更を反映する方法を知りたいと思っています。私は一般的な/高水準の概要、あるいは単純な場合はコンセプトの名前だけを必要とします。

私の最初の考えは、私のReduxストアにすべての映画を保持することだけでした。突然変異が終了すると、新たに追加されたムービーが返されます。これを私の店の映画に連結することができます。

「ムービーを追加」した後、「ムービーを編集」画面にポップアップして新しく追加されたムービーを見ることができます。「マイプロフィール」に戻ると、 。

これを行うには、自分のReduxストアにすべてを保持するよりも良い方法はありますか?私のためにこのアップデートを処理する可能性があるかどうかわからないアポロの魔法はありますか?


EDIT:私はupdateQueriesのアイデアを発見:http://dev.apollodata.com/react/cache-updates.html#updateQueries私はこれは私が(これは正しいアプローチではないなら、私に知らせてください)何をしたいと思います。これは私自身のReduxストアを使用する伝統的な方法よりも優れています。 addMovie変異後

// this represents the 3rd screen in my picture 
const AddMovieWithData = compose(
    graphql(searchMovies, { 
    props: ({ mutate }) => ({ 
     search: (query) => mutate({ variables: { query } }), 
    }), 
    }), 
    graphql(addMovie, { 
    props: ({ mutate }) => ({ 
     addMovie: (user_id, movieId) => mutate({ 
     variables: { user_id, movieId }, 
     updateQueries: { 
      getMovies: (prev, { mutationResult }) => { 
      // my mutation returns just the newly added movie 
      const newMovie = mutationResult.data.addMovie; 

      return update(prev, { 
       getMovies: { 
       $unshift: [newMovie], 
       }, 
      }); 
      }, 
     }, 
     }), 
    }), 
    }) 
)(AddMovie); 

それはgetMoviesクエリ(すごい迫力)を使用しているため、これは正しく「マイプロフィール」でビューを更新します!私はこれらのムービーを小道具として「ムービー編集」に渡していますので、どうすればそれも更新できますか?私は彼らに両方ともgetMoviesクエリを使用させるべきですか? getMoviesの新しい結果を店舗から引き出す方法はありますか?それで、もう一度クエリを実行せずに「ムービー編集」で再利用することはできますか?


EDIT2:getMoviesクエリコンテナとMyProfileEditMoviesの両方をラップが正常に動作するようです。 addMovie以降は、updateQueriesのために両方の場所で更新されました。getMoviesです。それも速いです。キャッシュされていると思いますか?

これはすべて動作するので、これはちょうど質問になると思います。これが最善のアプローチですか?タイトルに質問に

+0

アポロマジックの場合、いくつかのコードを表示します。 –

+1

「これは最善のアプローチですか?あなたはそれが意見に基づいているためにあなたの質問を閉じさせる危険があります。しかし、ここに来て、タイトルの質問に基づいて出てきた答えを書いてきました(私はそれを書いていますので、私はそれをします) – GreenAsJade

答えて

1

答えは「(あなたが発見したように)データが変更されたことを他のビューを駆動クエリをinform`するために使用updateQueries

です。

このトピックでは、現在進行中の取得反応するアポロスラックチャンネルでの議論であり、私が知っているコンセンサスです。

複数のクエリを更新することができます(名前が複数で、引数は、すべてのquの名前と一致するキーを含むオブジェクトです。更新が必要なeries)。

あなたが推測しているように、この「パターン」は、クエリを設計し使用して、変異を設計する上での人生を容易にし維持できるようにする必要があることを意味します。より一般的なqueiresは、あなたが変異updateQueriesアクションで1つを欠場する機会が少なくなることを意味します。

+0

ありがとう!ええ、 'updateQueries'を発見したとき、私はかなりうまくいきましたが、初心者ではありませんでした。 私の副疑問に対して何か考えがありますか?もともと、 "My Profile"だけが 'getMovies'クエリを持っていて、映画を「Edit Movies」に渡すだけでした。もちろん、これは突然変異の後、 'getMovies'がどこにあるかだけを更新するということです。つまり、" My Profile "だけです。 「ムービーを編集」に「getMovies」を追加していたので、そこでも更新されました。 – kayla

+0

これは、「慎重な設計とクエリの使用」で私が触れていることです:)私は答えが「はい」だと思います。他のオプションには、コンテナである別のコンポーネントの中にこれらのコンポーネントを両方含めることが含まれ、クエリを実行し、移動リストを小道具として渡すことに注意してください。これはUIデザインで意味がある場合にのみ選択肢です(私のアプリではあなたのように見えますが、 "映画の編集"はモーダルなので、 "私のプロフィール"から小道具を取ることができ、 "私のプロフィール"のコンテナそうですが、モーダルはしばしば素晴らしいアイデアではありません:O)。 https://apollostack.slack.com/archives/react-apolloでお会いしましょう – GreenAsJade

関連する問題