2017-03-18 13 views
0

イベントがPasswordUpdatedチャンネルに公開されたときに以前に取得したユーザーのパスワードを更新しようとしています。これは私がこれまで試してみました何で、GraphQLサブスクリプション:サブスクリプションのイベントに基づいてオブジェクトを更新する方法

this.apollo.subscribe({ 
    query: this.passwordUpdatedSubscription 
}).subscribe(({passwordUpdated}:any) => { 
    this.userDataQuery.updateQuery((previousResult) => { 
    previousResult.getUsers.filter(user => user.name === passwordUpdated.name).forEach(user => user.password = passwordUpdated.password); 
    }); 

}); 

はしかし、私はちょうどpreviousResultは不変であるコンソールにエラーから分かりました。 previousResultでパスワードを更新しようとしたとき、プロパティはwritable: falseです。どうすれば解決できますか?

答えて

0

変更された以前の結果を返す必要があります。 apolloクライアントの場合はsubscription docuをご覧ください。下のビットが更新クエリのポイントです。

reacts immutability helperに問題が少し説明されているか確認してください。

+0

'SubscribeToMore'機能は、apollo-reactクライアントでのみ使用できます。残念ながら、それは角度のあるクライアントでは利用できません。私はそのページからupdateQueryをチェックしました。彼らは 'newComments'配列を再作成し、それに新しいコメントをプッシュするように見えます。これは私が避けようとしているものです。以前の結果から新しい結果を再作成するのではなく、以前の結果を変更する方法を探しています。 –

+0

あなたは正しいです。私は 'SubscribeToMore'が見つかりませんでした。あなたが角度のためのapolloクライアントがあなたのために 'dataIdFromObject' [docu](http://dev.apollodata.com/angular2/cache-updates.html#dataIdFromObject)でバックグラウンドでそれを行う可能性があるかどうかをチェックすることができます。 )。 youre応答にユーザーのIDが含まれている場合は、apolloストアを更新する必要があります。 –

関連する問題