2017-04-23 57 views
2

所以基本上我想在突变后更新我的UI,但这确实是一个痛苦,现在已经停留了几天。突变后Apollo客户端更新无法映射原始结果?

我的一些组件依赖于我的根查询,并映射到结果上。

每当我创建新资源并更新我的根查询时,原始结果不会再加载,这会导致can't read property map of undefined,因为结果不再存在。添加一个支票什么都不做,它只是一直加载。

这是我的突变:

export const withCreateLink = graphql(createLink, { 
// Mutate normally gets passed as prop to wrapped component 
props({ownProps, mutate}) { 
    return { 
     // But for updating the store we're actually hijacking mutate to a custom function   
     createLink(url, description, group) { 
      return mutate({ 
       variables: { 
        url, 
        description, 
        group 
       }, 
       optimisticResponse: { 
        createLink: { 
         __typename: 'Link', 
         id: -1, 
         url, 
         description, 
         group: { 
          id: group 
         } 
        } 
       }, 
       update: (proxy, mutationResult) => { 
        const query = getAllGroups; 
        const data = proxy.readQuery({query}); 

        data.allGroups.forEach((groupData) => { 
         if(groupData.id == group) 
          groupData.links.push(mutationResult.data.createLink); 
        }); 

        proxy.writeQuery({ 
         query, 
         data 
        }) 
       } 
      }) 
     } 
    } 
} 
}); 

我只想简单地只刷新我的资源添加到组更新我的UI。有人可以帮我吗?

回答

0

转化dataIdFromObject检查类型名的伎俩:

dataIdFromObject: (result) => { 
    if (result.id && result.__typename) { 
     return result.__typename + ':' + result.id; 
    } 
    return null; 
} 

我想我写不出来我的缓存与只使用标识。这显然是一个默认提议。

+0

这是1.0以来的默认值,所以你应该没有提供dataIdFromObject。 – helfer