小编Bar*_*art的帖子

Apollo GraphQL:类型策略中合并函数的用例?

我之前在Apollo\xe2\x80\x99s 社区聊天中问过这个问题中问过这个问题,但我将其重新发布到这里,因为两周后 \xe2\x80\x99 没有得到答复。

\n

这个问题是关于Apollo 3.0引入的新缓存的。此更新弃用了本地查询,转而使用 \xe2\x80\x9ctype 策略\xe2\x80\x9d(或 \xe2\x80\x9cfield 策略\xe2\x80\x9d),其中包括多个用于处理缓存的工具,例如可以为每个 GraphQL 类型定义一个merge函数,以指定传入数据应如何与缓存中的现有数据合并。

\n

我\xe2\x80\x99m 想知道哪些用例更适合该函数,而不是通过或merge编写预先计算的更新值。writeQuerywriteFragment

\n

让\xe2\x80\x99s 说我有一个包含对象的数组,并且该数组是另一种类型的属性。例如:

\n
type Person {\n  hobbies: [Hobby!]!\n}\n
Run Code Online (Sandbox Code Playgroud)\n

该应用程序允许我删除、添加和更新该数组中的元素。应该hobbies使用该merge功能吗?以前,我在本地突变解析器中编写了此逻辑,但这些已被弃用。我可以通过为每个解析器定义一个函数来轻松模仿旧行为,该函数包含添加/删除/更新逻辑,并用于writeFragment存储结果。

\n

我可以看到使用的好处,merge因为(我认为)it\xe2\x80\x99是较低的抽象层,但是它可以在传入数组的情况下使用吗hobbies?据我所知,它的工作方式意味着我们\xe2\x80\x99d 必须通过传入的输入来推断突变的类型。例如:

\n
    \n
  • 如果传入的数组少包含一项(或仅包含已删除的项),则我们执行删除操作,并且我们可以假设所有其他元素保持不变。
  • \n
  • 如果传入的数组只包含一个元素并且它是新的,我们执行添加操作,并将这一元素合并到数组中
  • \n
  • 如果传入数组包含相同数量的元素(或者只有一个更新的项目),我们必须更新其中一个,并且现在必须找出要替换的元素(让\xe2\x80\x99s 假设,由于实现的原因,它无法直接更新单个Hobby,因为其他爱好也可能受到影响,例如由于不重叠的时间限制)。
  • \n
\n

这似乎不如镜像旧方法那么优雅,在旧方法中,在hobbies调用之前计算新值writeFragment新值。

\n

使用有性能优势吗mergehobbies使用 时,现有的和不受影响的项目是否保留在原处merge,并在使用 时被覆盖writeFragment?假设新计算的数据传递到writeFragment包含一个数组,其中包含未修改元素的浅副本。 …

javascript caching apollo react-apollo apollo-client

6
推荐指数
1
解决办法
1865
查看次数

换行符在 Mac 上表示为“\r”?

请参阅小提琴:如果您Enter在最近的 Mac 上按下textarea,该newline字符似乎由 表示\r,这与对thisthisthis 问题以及维基百科的答案形成直接对比。总结这些链接:

  • \r 表示旧 Mac(OS 9 及之前)上的换行符
  • \n 表示 UNIX 系统(OS X、Linux)上的换行符
  • \r\n 表示 Windows 上的换行符。

当我在 JSFiddle 中按 Enter 时,得到以下结果(OS X 10.11.6):

textarea: \r

span: \n
Run Code Online (Sandbox Code Playgroud)

这种行为花了很长时间才弄清楚,似乎不合逻辑。潜在的理由是什么?

html javascript macos escaping char

4
推荐指数
1
解决办法
7917
查看次数