【问题标题】:Apollo Client how to send locally cached mutations to the serverApollo 客户端如何将本地缓存的突变发送到服务器
【发布时间】:2020-10-26 12:39:39
【问题描述】:

我正在尝试根据用户请求将所有本地缓存​​的突变发送到服务器。 这个想法是在 UI 中有一个“保存更改”按钮,它允许用户使用所有本地应用的更改来更新远程数据库。

示例:我在缓存中有一个用户对象:

"User:1": {
   name: "Tom",
   enabled: true
},
"User:2": {
   name: "John",
   enabled: true
}

现在,假设 UI 用户通过设置 enabled: false 禁用两个用户并按下“保存更改”。此时,我希望发送所有本地更改;两个对象都应该发送到 remote 并保存在那里。 我尝试了几种方法,但它们都导致了相当老套的代码。 有没有canonic 的方法?

不确定这是否相关,但我正在为 C# 使用“热巧克力”graphql 服务器。

【问题讨论】:

    标签: reactjs graphql apollo


    【解决方案1】:

    没有什么比得上“本地缓存的突变”了。

    通过写入缓存,您只需改变其他操作的结果(查询或突变)。没有像“本地队列”、“同步更新的本地副本”等 - 它只是一个缓存。您可以写入它以保存/避免突变后不必要的查询(特别是对于相关类型)。

    要创建“保存更改”功能,只需从缓存中读取数据并在突变中使用它 - 可能是特殊的,接受数组作为参数/输入类型。如果没有此类可用/允许的突变,您可以尝试将许多(别名)突变连接到一个请求中。

    【讨论】:

    • 措辞足够公平。关于解决方案 - 这几乎是我到目前为止所想出的。我希望有更好的方法来做到这一点。这个问题似乎相当标准,我很惊讶我找不到可以解决它的包。
    • 不需要?做什么的?本地更改不应该存储在缓存中 - 它是准备突变的一部分 - 只需将其保持在本地组件状态(或 Formik)并在一个单一的经典突变中立即使用。
    • 我正在使用 Apollo 进行本地状态管理。这部分运行良好,但令我惊讶的是,无法将该状态传回遥控器。我想我会按照你说的做。我将在服务器端创建一个特殊的突变并通过它推送所有更改。
    猜你喜欢
    • 1970-01-01
    • 2020-11-27
    • 2020-02-03
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多