运行突变后重新获取查询

Posted

技术标签:

【中文标题】运行突变后重新获取查询【英文标题】:refetchQueries after running a mutation 【发布时间】:2021-01-02 05:56:14 【问题描述】:

以前,我运行的突变有点像这样:

export const useEditLocationName = () => 

  const [editFavoriteLocationName] = useEditFavoriteLocationNameMutation(
    refetchQueries: [ query: GetMyFavouritePlacesDocument],
    awaitRefetchQueries: true,
    onCompleted: () => 
      Alert.alert('Name');
    ,
    onError: () => 
      Alert.alert('Oops');
    ,
  );

  const editLocationName = async (
    favouritePlaceId: number,
    customisedName: string,
  ) => 
    editFavoriteLocationName(
      variables: 
        id: favouritePlaceId,
        label: customisedName
      ,
    );
    return null;
  ;
  return editLocationName;
;

每次我运行这个突变时,useGetMyFavouritePlacesQuery 的结果,即GetMyFavouritePlacesDocument 都会自动更新(无论在哪里使用这个查询)。这很有效,然后useGetMyFavouritePlacesQuery 不需要任何参数。但是,既然 api 发生了一些变化,我需要将 id 传递给查询,以便它返回结果。我该怎么做?

我不能将变量直接传递给GetMyFavouritePlacesDocument,我也不能在这里使用钩子。每次运行此突变时,我还能如何有效地重新获取数据?

【问题讨论】:

【参考方案1】:

如果您在突变响应中返回 id 以及可能有关数据的一些其他唯一数据,那么 Apollo 将自动更新缓存

这是一个例子https://www.freecodecamp.org/news/how-to-update-the-apollo-clients-cache-after-a-mutation-79a0df79b840/

【讨论】:

这似乎有效,但它给了我这个错误***.com/questions/63423578/…,即使我已经返回了唯一的 ID 和其他一些信息。该错误建议我定义一个自定义合并函数。我怎么能这样做? 我在这里添加了更多代码和细节***.com/questions/63918330/…

以上是关于运行突变后重新获取查询的主要内容,如果未能解决你的问题,请参考以下文章

突变后的 Apollo 更新不会触发重新渲染

使用 Apollo-Client 重新获取查询会引发错误

如何让 Apollo 客户端重新获取特定查询?

如何从另一个组件重新获取 graphql 查询?

react-apollo 突变不会重新获取

Vue-apollo 从另一个组件重新获取查询