问题标签 [urql]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2989 浏览

javascript - 如何在突变时使用 urql 更新 grapqhl 缓存,其中初始查询响应不包含所需的 __typename?

我的情况有 4 个组件按此顺序相互嵌套:(Products页面)ProductList、、、ProductListItemCrossSellForm

Products执行 graphql 查询(使用 urql),如下所示:

products返回一个Products包含字段 的数组,该字段crossSells返回一个 的数组CrossSellsProducts向下传播到CrossSellForm,其中包含一个返回数组的变异查询CrossSells

问题是,当我提交 crossSellForm 时,请求成功通过但crossSellsup inProducts没有更新,并且 UI 反映了陈旧的数据。这仅在初始提取Products包含 no时发生crossSells,因此初始响应如下所示:

如果存在crossSell,则没有问题,ui 会正确更新,响应如下所示:

我在https://formidable.com/open-source/urql/docs/basics/上阅读了一些关于 urql 缓存机制的内容,据我了解,它使用文档缓存,因此它基于__typename. 如果查询请求具有相同的__typename内容,它将从缓存中提取它。如果mutation发生相同的情况,__typename它将使缓存中的所有对象无效,__typename因此下次用户使用该对象获取对象时,__typename它将执行网络请求而不是缓存。

我认为正在发生的情况是在初始情况下,products但没有crossSells表单提交成功,但Products页面没有更新,因为没有对带有__typenameof的对象的引用CrossSell,但在第二种情况下,它会破坏缓存并再次执行查询,刷新产品和交叉销售,并且 UI 已正确更新。

我真的很享受将 urql 钩子与 React 组件一起使用的体验,并想继续,但我不确定如何在不使用其他工具的情况下解决这个问题。

我尝试使用以下提示在表单提交时强制重新渲染:如何强制组件在 React 中使用钩子重新渲染?但它遇到了同样的问题,Products它将再次从缓存中获取并crossSells返回一个空数组。我考虑过将 urql 的 RequestPolicy 修改为仅网络,以及强制重新渲染,但我认为每次重新获取都会不必要地昂贵。我现在正在尝试的解决方案是将所有状态转移到 redux 中,这是一个单一的事实来源,以便任何更新crossSells都能正确传播,尽管我确信它会起作用,但这也意味着我将换取一个标准 redux 样板的钩子给我带来了很多便利。

如何在提交表单时优雅地更新Productswith ,同时仍然使用 urql 和钩子?crossSellsCrossSellForm

0 投票
3 回答
2277 浏览

javascript - 可以为 urql 设置自定义标题吗?

Github GraphQL v4 API 具有所谓的模式预览,您可以在其中使用新的模式功能 - 但它需要自定义Accept标头。

我以前用过 Apollo 客户端,但我想用 Formidables urlq试试这个新应用。有没有办法用 urql 客户端设置客户标头?

更新

我认为这已经进入代码库,只是没有记录 - https://github.com/FormidableLabs/urql/pull/96/files

0 投票
0 回答
478 浏览

javascript - Svelte,只重新渲染列表中的一个项目,而不是整个列表

无论是svelte-apollohttps://github.com/timhall/svelte-apollo/issues/19)和@urql-sveltehttps://github.com/FormidableLabs/urql/issues/704)我都会重新渲染整个列表只是一个元素重新渲染。

复制步骤:

如果我在这里阅读:https://svelte.dev/tutorial/svelte-options,我可以通过以下方式理解:

immutable={true} - 你从不使用可变数据,因此编译器可以进行简单的引用相等检查以确定值是否已更改

immutable={false} — 默认值。Svelte 对于可变对象是否发生变化会更加保守

如果您看到示例,他们正在更改todos数组,就像我们也在做的那样urql

为什么它不适用于我的 REPLtodos示例?

最后是todos一个新数组吗?

0 投票
1 回答
427 浏览

javascript - Urql 错误:无法读取未定义的变量名的属性,并且我正确定义了它

这是我的问题:

'GraphQuery' 变量是一个看起来像这样的对象

接受变量的 Playground 上的 graphql 查询如下所示

但我不断得到的错误是

0 投票
2 回答
763 浏览

websocket - 如何使用 Absinthe (Elixir) 和 Urql 进行 graphql 订阅?

我的想法是使用 react 和 urql 构建一个客户端应用程序,以及使用 elixir 和苦艾酒构建一个 graphql api,但目前看起来它们并不能很好地结合在一起。

除了 Apollo 之外,有没有办法将 Absinthe 订阅实际用于任何其他客户端?我尝试使用 urql,但由于 ws 连接失败,出现以下错误:

WebSocket 连接到“ws://localhost:4000/socket/websocket”失败:WebSocket 握手期间出错:发送非空“Sec-WebSocket-Protocol”标头但未收到响应

到目前为止,我发现的唯一似乎与这个问题有关的是这个库 absinthe/socket-apollo-link (https://github.com/absinthe-graphql/absinthe-socket/tree/master/packages/socket -apollo-link)但它显然只适用于阿波罗。

在我失败的尝试中,我做了以下事情:

这个'subscriptions-transport-ws'我从一个教程中找到,并且在一些gh问题中提到了ws url末尾的神秘'/websocket',但它似乎有效(在将它添加到url末尾之前有根本没有ws连接)。

0 投票
2 回答
1392 浏览

graphql - URQL - GraphQL 如何获取响应标头

当我对 GraphQL 服务器进行查询时,我想读取 http 响应标头中设置的信息。

当我使用 urql 客户端执行查询时,我只得到这些信息:

有没有办法获取响应标头?

0 投票
2 回答
3823 浏览

javascript - @urql/svelte,“在组件初始化之外调用的函数”如果不在 onMount 中

我正在尝试https://github.com/FormidableLabs/urql/tree/master/packages/svelte-urql伙计们完成的令人惊叹的工作。

直到今天的问题,一切都很好。

我正在使用下面的代码,它给了我这个错误:

代码:

你能提出什么问题吗?

如果我使用它就可以await()onMount()!像这样:

这里的代码@urql/svelte

  1. query.ts:https ://github.com/FormidableLabs/urql/blob/master/packages/svelte-urql/src/operations/query.ts
  2. context.ts:https ://github.com/FormidableLabs/urql/blob/master/packages/svelte-urql/src/context.ts

也许是context代码?

如果您需要,我可以在 CodeSandbox 上创建一个 REPL,没问题。

错误@urql/sveltehttps://github.com/FormidableLabs/urql/issues/795。

有关您的 Svelte 项目的信息: - Chrome 83 - Svelte 版本:3.23.0 - 汇总

0 投票
2 回答
1355 浏览

javascript - urql useQuery 的暂停选项不会暂时冻结请求

我正在尝试使用以下代码一次执行 urql useQuery 。但由于某种原因,每次重新渲染都会调用它。

根据文档https://formidable.com/open-source/urql/docs/basics/queries/#pausing-usequery ,此查询最初应在渲染时暂停,并且仅在从 React.useEffect 调用时才应执行山。

使用 urql 一次执行查询的最佳方法是什么?

0 投票
1 回答
728 浏览

reactjs - 在 Jest 中模拟 URQL 的获取状态

我试图在我的测试中模拟获取状态。成功模拟了有数据的状态和有错误的状态。您可以在下面找到一个示例:

该组件如下所示:

我不知道我做错了什么。当我运行测试时,它说fetchingis false。任何帮助,将不胜感激。

0 投票
1 回答
489 浏览

svelte - 以异步方式为 Svelte 初始化 URQL(我需要将 schema.json 拆分为单独的块)

我正在使用 Svelte 和 URQL。

我在这里使用你的包文件夹中的 svelte 示例,除了我format: 'esm'在我的rollup.config.js.

当我在我的代码中使用时,我的 Rollup 已经将我的最终包代码分割成块import('./Component.svelte')

我很难做的是异步初始化 urql,如下所示:

如果我使用类似的东西:

App.svelte并从中调用它;(async () => await initURQL())()会给我错误:

我怎样才能解决这个问题?