如果我想在Apollo中实现开放式UI,通常的实现方式如下:
client.mutate({
mutation: createSurveyResponseMutation,
variables,
optimisticResponse: {
createSurveyResponse: {
...variables.input,
__typename: 'SurveyResponse',
questionResponses: { __typename: 'ModelQuestionResponseConnection', items: [] },
},
},
update: (store, { data: { createSurveyResponse } }) => {
store.writeQuery({
query: myQuery,
variables: { surveyResponseId: createSurveyResponse.id },
data: {
getSurveyResponse: createSurveyResponse,
},
});
},
});
执行此操作与仅在调用突变之前调用client.writeQuery
有什么区别?
client.writeQuery({
query: myQuery,
variables: { surveyResponseId: response.id },
data: {
getSurveyResponse: {
...response,
__typename: 'SurveyResponse',
questionResponses: { __typename: 'ModelQuestionResponseConnection', items: [] },
},
},
});
client.mutate({
mutation: createSurveyResponseMutation,
variables,
});
我有几个具体问题:
client.mutate(...)
之后立即更新我的乐观更新(例如,可以安全地致电client.mutate(...)
并导航到需要商店更新的页面)?如果没有,我的第二种情况是否具有此优势(client.writeQuery()
之后立即更新商店)?欢迎提供关于这两个示例的生命周期的任何信息。client.writeQuery()
和client.mutate(...)
都成功。由于在client.mutate(...)
成功时存储中已经有一个条目,因此该条目将通过服务器响应自动更新,而无需我使用update
函数(就像您调用更新突变时一样) ?