2017-07-04 67 views
0

直接高速緩存訪​​問我有以下服務類:阿波羅角

const DeleteUserMutation = gql ` 
 
\t mutation($user_id: ID!) { 
 
\t \t deleteUser(id: $user_id) { 
 
\t \t \t id 
 
\t \t } 
 
\t } 
 
`; 
 

 
@Injectable() 
 
export class UserService { 
 
    constructor(private apollo: Apollo) {} 
 

 
    deleteUser(userId: string) { 
 
    return this.apollo.mutate({ 
 
     mutation: DeleteUserMutation, 
 
     variables: { 
 
     user_id: userId 
 
     }, 
 
     update: (proxy, mutationResult) => { 
 
     proxy.writeQuery({ 
 
      query: DeleteUserMutation, 
 
      data: { 
 
      deleteUser: { 
 
       id: userId, 
 
       __typename: 'User' 
 
      } 
 
      }, 
 
      variables: { 
 
      user_id: userId 
 
      } 
 
     }); 
 
     }, 
 
    }) 
 
    } 
 
}

因此我想刪除我的服務器的用戶。突變實際上可以在服務器上成功運行並執行,但緩存永遠不會更新。我不確定我的錯誤在哪裏,我的update部分在上面。

回答

0

當用戶居住時,您正在嘗試更新Mutation而不是Query

比方說,你有這個疑問:

query allUsers { 
    users: [User] 
} 

要更新你想這樣做緩存:

const DeleteUserMutation = gql ` 
    mutation($user_id: ID!) { 
     deleteUser(id: $user_id) { 
      id 
     } 
    } 
`; 

@Injectable() 
export class UserService { 
    constructor(private apollo: Apollo) {} 

    deleteUser(userId: string) { 
    return this.apollo.mutate({ 
     mutation: DeleteUserMutation, 
     variables: { 
     user_id: userId 
     }, 
     update: (proxy, { data: { deleteUser } }) => { 
     // Get data from `allUsers` query 
     const data = proxy.readQuery({ 
      query: AllUsersQuery 
     }); 

     // Logic to remove an item from an array 
     const users = removeUserFromArray(deleteUser.id, data.users); 

     // write new array with users to the store 
     proxy.writeQuery({ 
      query: AllUsersQuery, 
      data: { 
      users 
      } 
     }); 
     }, 
    }) 
    } 
} 

看看在"Updating the Store"章,用update()部分功能在react-angular文檔。這些規則也適用於Angular。

+0

謝謝,我會試試這個。但是,即使'allUsers'查詢不是導致用戶列表首先位於商店中的原始查詢,那麼這樣做還是可行嗎? – Sammy

+0

所以我嘗試了,答案是否定的......我猜我需要的東西可以通過'writeFragment'解決嗎? – Sammy