如何在apollo客户端中更新查询?

时间:2020-06-09 21:04:50

标签: reactjs graphql react-apollo apollo-client

假设我有一个像这样的简单数据模型

User
 - email
 - password
 - Profile
    - profile_image
    - address
    - phone_number

当我访问用户的个人资料页面时,我使用useQuery并从服务器查询用户

const ME = gql`
  query {
    me {
      email
      profile {
        profileImage
        address
        phoneNumber
      }
  }
`; 
const {loading, data, refetch} = useQuery(ME);

当我想更新个人资料时。我会做的

const UPDATE_PROFILE = gql`
  mutation($profileImage: String!, $address: String!, $phoneNumber: String!) {
    updateProfile(profileImage: $profileImage, address: $address, phoneNumber: $phoneNumber) {
      profileImage
      address
      phoneNumber
    }
  }
`;

const [updateProfile, {loading}] = useMutation(UPDATE_PROFILE, {
  onCompleted(data) {
    // Refetch to refresh whole user data
    refetch();
  }
}

我只想在页面中显示新的更新的用户信息,所以我要做的是从useQuery(ME)调用refetch()

但是我发现我可以使用doc中的refetchQueries()。 哪个是更好的选择?它们之间有什么区别?

1 个答案:

答案 0 :(得分:0)

refetchQueriesrefetch之间的区别:

  • refetchQueries:您可以在发生突变后重新获取所有查询,包括您的ME查询或其他查询,例如getMessageListgetListUser,...

    refetchQueries是更新缓存的最简单方法。使用refetchQueries,您可以指定一个或多个要在突变完成后运行的查询,以重新获取可能已受到该突变(refetchQueries doc)影响的商店部分。

  • refetch:使用ME就是refetch的结果之一时,您只能重新查询useQuery(ME)

    该函数可让您重新查询并可选地传入新变量(refetch doc)。

如果您要重新获取ME数据,可以使用refetch。另一方面,如果要更新其他查询,则应使用refetchQueries
根据我的经验,我更喜欢在突变后使用refetchQueries,而不是使用refetch