首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用apollo-link在任何突变时获取查询

使用apollo-link在任何突变时获取查询
EN

Stack Overflow用户
提问于 2020-10-15 18:05:54
回答 1查看 410关注 0票数 1

我正在开发一个应用程序,其中有一个嵌套了资产树的项目。在后端,当孙子(或孙孙)的一个子代更新时,项目的更改日期也会更新。

在react-apollo中,我设置了所有查询,以便返回更新后的对象,并使用更新后的数据更新apollo的缓存。但我也想更新项目的更改日期(可能是父母、祖父母等)。

一种解决方案是使用refetchQueries选项。然而,这意味着我需要在使用useMutation钩子的所有部分中实现这个refetchQueries选项,这会导致大量代码重复,并有可能被其他开发人员(4人小组)忘记。一个更好的选择是创建一个自定义钩子,它包装了useMutation钩子,但开发人员仍然需要使用它。

因此,我现在正在考虑使用apollo-link来实现这一点,这将影响所有执行的突变。但是,我不知道是否可以将查询添加到操作中,或者是否可以对查询进行排队,如果可能-如何做到这一点?

谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

发布于 2020-10-16 14:06:52

使用ApolloLink,您可以生成链接的afterware来解析返回的响应,并在适当的情况下有条件地更新缓存。

代码语言:javascript
复制
    import { ApolloLink } from "apollo-link";
    import { createHttpLink } from "apollo-link-http";
 
    const httpLink = createHttpLink({ uri: "/graphql" });
    const updateDateCacheLink = new ApolloLink((operation, forward) => {
       return forward(operation).map(response => {
           const context = operation.getContext();
           const { response: { headers } } = context;
    
           /* conditionally update cache */     

         return response;
     });
   });
 
    // use with apollo-client
    const link = updateDateCacheLink.concat(httpLink);

或者,您可以考虑使用HOC返回实现useMutationupdate回调的组件,该组件接收更新有效负载。这将避免重复,并封装与您的请求一致的公共缓存逻辑。正如您所提到的,自定义钩子可以包装并用来代替useMutation (下面没有显示)。

代码语言:javascript
复制
const withMutationCacheUpdate = args => Wrapped => {
  return function(props) {
    const [updateData] = useMutation(UPDATE_DATA, {
      update(cache, { data: { newData } }) {
        // Read relevant data from cache with cache.readQuery,
        // then update using cache.writeQuery, cache.writeFragment 
       // or cache.modify as appropriate with returned payload and possibly args
      },
    })
    return <Wrapped {...props} updateData={updateData} />
  }
}

const config = {...}
const YourComponent = props => { ... }
const YourWrappedComponent = withMutationCacheUpdate(config)(YourComponent)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64369234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档