2017-05-16 3 views
2

プロファイルを取得する反応ネイティブアプリケーションで上位コンポーネントがあります。私が「フォロワーを追加する」突然変異を呼び出すとき、そのフォロワーコレクションの新しいフォロワーを反映するようにプロファイルを更新したい。ストアへの更新を手動でどのようにトリガーしますか。プロファイルオブジェクト全体を再取得することはできますが、ネットワークの再フェッチをせずにクライアント側で挿入するだけです。現在、突然変異を引き起こすと、プロファイルは画面の変化を反映しません。Apolloデータストア/キャッシュを突然変異クエリから更新するには、更新オプションが起動しないようです。

私はupdateオプションを使用している必要がありますが、私の名前付き突然変異ではうまくいかないようです。 http://dev.apollodata.com/react/api-mutations.html#graphql-mutation-options-update

const getUserQuery = gql` 
query getUserQuery($userId:ID!) { 
    User(id:$userId) { 
     id 
     username 
     headline 
     photo 
     followers { 
     id 
     username 
     thumbnail 
     } 
    } 
} 
`; 
... 

const followUserMutation = gql` 
    mutation followUser($followingUserId: ID!, $followersUserId: ID!) { 
    addToUserFollowing(followingUserId: $followingUserId, followersUserId: $followersUserId) { 
     followersUser { 
     id 
     username 
     thumbnail 
     } 
    } 
    }`; 
... 

@graphql(getUserQuery) 
@graphql(followUserMutation, { name: 'follow' }) 
@graphql(unfollowUserMutation, { name: 'unfollow' }) 
export default class MyProfileScreen extends Component Profile 

... 

    this.props.follow({ 
    variables, 
    update: (store, { data: { followersUser } }) => { 
     //this update never seems to get called 
     console.log('this never triggers here'); 
     const newData = store.readQuery({ getUserQuery }); 
     newData.followers.push(followersUser); 
     store.writeQuery({ getUserQuery, newData }); 
    }, 
    }); 

答えて

0

編集:ちょうどあなたが突然変異のgraphql定義に更新を追加する必要があることに気づきました。

EDIT 2:@MonkeyBonkeyを使用すると、読取り問合せ機能

@graphql(getUserQuery) 
 
@graphql(followUserMutation, { 
 
    name: 'follow', 
 
    options: { 
 
    update: (store, { data: { followersUser } }) => { 
 

 
     console.log('this never triggers here'); 
 
     const newData = store.readQuery({query:getUserQuery, variables}); 
 
     newData.followers.push(followersUser); 
 
     store.writeQuery({ getUserQuery, newData }); 
 
    } 
 
    }, 
 
}); 
 
@graphql(unfollowUserMutation, { 
 
    name: 'unfollow' 
 
}) 
 
export default class MyProfileScreen extends Component Profile 
 

 
    ... 
 

 
    this.props.follow({ 
 
     variables: { .... }, 
 
    );

私はあなたがupdateQueries機能linkを使用してストアを更新示唆に変数を追加することが必要であることが分かりました。

このpost

あなたはコンポーネントに変異を追加するためにcomposeを使用することができ、たとえば参照してください。突然変異の内部では、client.mutateに電話する必要はありません。フォローしているユーザーのクリックで突然変異を呼び出すだけです。

アポロがあなたのためにアップデートを処理するようにすることもできます。突然変異の反応を少し変更すると、後に続くユーザーに以下のユーザーを追加し、dataIdFromObject機能を追加することになります。 link

+0

ドキュメントによると、updateQueriesは廃止予定で、代わりにhttp://dev.apollodata.com/react/cache-updates.html#updateQueriesを使用すると、更新オプションを使用しようとしましたが、アップデートを引き起こすようです - 私はそのコードスニペットで質問を更新します – MonkeyBonkey

+0

console.log(newData)でしたか?一つのことは、 'readQuery'がそれを見つけるためのクエリに名前をつける必要があるかもしれないということです。 'const getUserQuery = gql'query getUserQuery {....}' –

+0

私はreadqueryの名前をつけましたが、まだ更新機能を起動していません - console.logは最初の行ですが、呼び出されません。 console.logに質問をして、質問に名前をつけてください。 – MonkeyBonkey

関連する問題