Apollo React嵌套查询和变异

时间:2018-11-21 17:32:33

标签: reactjs graphql react-apollo apollo-client

我有一个组件,该组件希望获取个人资料的数据并允许在同一视图上发布消息。我在这里创建了一个简单的配置文件组件,并在查询中设置了突变,类似于the Apollo React tutorial

运行此命令时,会得到一个正确渲染的数据查询。当按下按钮时,会发生突变,但是页面会重新渲染,页面上的Query的{​​{1}}参数中有一个空对象,而页面错误则显示为data。空白的Cannot read property 'name' of undefined对象)。

这里有更好的方法吗?

data

2 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,即数据未定义。在我的情况下,问题是由查询subscribeToMore选项引起的,我正在通过使更新数据与原始查询结果合并(其中不包含完全相同的数据字段)而无声地失败,从而使缓存无效。

该问题未提及订阅,但这将是一个类似的缓存失效问题。

要解决此问题,我首先尝试确保查询和突变返回的数据相同。

如果仍然无法解决,则根据响应性的需要,要么查看“ refetchQueries / awaitRefetchQueries”以刷新查询,要么使用"update"选项手动将更新后的数据放入本地缓存中在突变上。

祝你好运。

答案 1 :(得分:0)

尝试将以下内容添加到onClick突变中,这将有助于避免需要手动更新缓存,尽管这将是下一步。您可以仅将查询的字符串名称传递给refetchQueries,而无需在此处传递实际的查询。另一个技巧是确保返回相同的字段,以便缓存对象匹配(不确定在查询/突变中返回的类型。

onClick={e => {
  addEndorsement({
    variables: {
      profileId: profileId,
      body: 'This is a test.',
    },
    refetchQueries: ['GetProfileQuery']
  })
}}