突然変異後、影響を受けたデータをビュー間でどのように更新すればよいですか?
私は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
クエリコンテナとMyProfile
とEditMovies
の両方をラップが正常に動作するようです。 addMovie
以降は、updateQueries
のために両方の場所で更新されました。getMovies
です。それも速いです。キャッシュされていると思いますか?
これはすべて動作するので、これはちょうど質問になると思います。これが最善のアプローチですか?タイトルに質問に
アポロマジックの場合、いくつかのコードを表示します。 –
「これは最善のアプローチですか?あなたはそれが意見に基づいているためにあなたの質問を閉じさせる危険があります。しかし、ここに来て、タイトルの質問に基づいて出てきた答えを書いてきました(私はそれを書いていますので、私はそれをします) – GreenAsJade