我有一个组件,该组件希望获取个人资料的数据并允许在同一视图上发布消息。我在这里创建了一个简单的配置文件组件,并在查询中设置了突变,类似于the Apollo React tutorial。
运行此命令时,会得到一个正确渲染的数据查询。当按下按钮时,会发生突变,但是页面会重新渲染,页面上的Query
的{{1}}参数中有一个空对象,而页面错误则显示为data
。空白的Cannot read property 'name' of undefined
对象)。
这里有更好的方法吗?
data
答案 0 :(得分:1)
我遇到了类似的问题,即数据未定义。在我的情况下,问题是由查询subscribeToMore选项引起的,我正在通过使更新数据与原始查询结果合并(其中不包含完全相同的数据字段)而无声地失败,从而使缓存无效。
该问题未提及订阅,但这将是一个类似的缓存失效问题。
要解决此问题,我首先尝试确保查询和突变返回的数据相同。
如果仍然无法解决,则根据响应性的需要,要么查看“ refetchQueries / awaitRefetchQueries”以刷新查询,要么使用"update"选项手动将更新后的数据放入本地缓存中在突变上。
祝你好运。
答案 1 :(得分:0)
尝试将以下内容添加到onClick突变中,这将有助于避免需要手动更新缓存,尽管这将是下一步。您可以仅将查询的字符串名称传递给refetchQueries
,而无需在此处传递实际的查询。另一个技巧是确保返回相同的字段,以便缓存对象匹配(不确定在查询/突变中返回的类型。
onClick={e => {
addEndorsement({
variables: {
profileId: profileId,
body: 'This is a test.',
},
refetchQueries: ['GetProfileQuery']
})
}}