为什么需要更新程序/更新功能来更新React Relay和Apollo Client中的本地缓存?

时间:2018-09-05 20:12:16

标签: reactjs graphql apollo relaymodern

我正在考虑使用React Relay或Apollo Client。我喜欢GraphQL作为可对任何API或数据存储区执行的查询语言的想法。

但是,让我感到惊讶的是,在进行简单的更改(例如将待办事项添加到列表)后,需要手动(强制性)更新存储/缓存。这是更新程序/更新功能的文档:

http://facebook.github.io/relay/docs/en/mutations.html https://www.apollographql.com/docs/react/essentials/mutations.html

为什么需要用户定义的更新程序功能?

具体地说,为什么我必须编写一个更新程序函数来处理按顺序运行这两个GraphQL查询?

//Create todo item
mutation createTodo($input: TodoInput!) {
    createTodo(input: $input) {
        id
        name
        desc
    }
}

mutationVariables = { input: { name: 'Shopping', desc: 'Get groceries' }};


//Select all todos
query {
    todos {
        id
        name
        desc
    }
}  

为什么待办事项查询不会自动返回新的待办事项?这就是声明性查询语言IMO的要点。

1 个答案:

答案 0 :(得分:0)

更新本地缓存的想法是最大程度地减少在客户端和服务器之间传递的数据量。

手动更新本地缓存完全取决于您。您可以绝对编程您的变异以返回新的或所有待办事项,然后它将更新您的本地缓存。 (这比手动更新要慢,因为您需要等待响应。)有一些很好的用例,用于手动更新与等待服务器的响应

使用阿波罗,您还可以关闭本地缓存,仅使用“仅网络”作为获取策略。