2

我正在考虑使用 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
    }
}  

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

4

1 回答 1

0

更新本地缓存背后的想法是最小化客户端和服务器之间传递的数据量。

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

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

于 2018-09-06T00:41:38.230 回答