突变后的阿波罗更新不会触发重投
问题描述:
我遇到了graphQL apollo中的突变问题。当页面加载时,它将运行查询lectureResponseQuery
,并且如果运行查询== null变量fetchLectureResponseMutation
以创建新文档。这个变异返回新的结果,我做了一个更新的查询,我期望组件将重新渲染与新的数据,但它不会。有谁知道这是为什么?谢谢!突变后的阿波罗更新不会触发重投
@graphql(fetchLectureResponseMutation, {
options: ownProps => ({
variables: { lectureName: ownProps.match.params.lectureName },
update: (proxy, { data: { fetchLectureResponse } }) => {
const data = proxy.readQuery({
query: lectureResponseQuery,
variables: { lectureName: ownProps.match.params.lectureName },
});
data.lectureResponse = fetchLectureResponse;
proxy.writeQuery({
query: lectureResponseQuery,
data,
});
},
}),
name: 'fetchLectureResponse',
})
@graphql(lectureResponseQuery, {
options: ownProps => ({
variables: { lectureName: ownProps.match.params.lectureName },
}),
})
class LecturePage extends React.PureComponent {
componentWillUpdate(nextProps) {
if (nextProps.data.lectureResponse === null) {
this.props.fetchLectureResponse();
}
}
render() {
const { data } = this.props;
if (data.loading || data.lectureResponse === null) {
return <Loading />;
}
return <LectureLayout lectureResponse={data.lectureResponse} />
}
}
答
对于任何正在研究这个问题在面向未来的中心问题是,我想做一个查找或创建操作。如果查询只是返回新对象(如果该对象不存在),则这会更好,因为那样只会产生1个后端调用,这意味着您不必同步查询和变体之间的时间。
TLDR:使用查询进行findOrCreate操作!