问题标签 [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.
javascript - 如何在突变时使用 urql 更新 grapqhl 缓存,其中初始查询响应不包含所需的 __typename?
我的情况有 4 个组件按此顺序相互嵌套:(Products
页面)ProductList
、、、ProductListItem
和CrossSellForm
。
Products
执行 graphql 查询(使用 urql),如下所示:
products
返回一个Products
包含字段 的数组,该字段crossSells
返回一个 的数组CrossSells
。Products
向下传播到CrossSellForm
,其中包含一个返回数组的变异查询CrossSells
。
问题是,当我提交 crossSellForm 时,请求成功通过但crossSells
up 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
页面没有更新,因为没有对带有__typename
of的对象的引用CrossSell
,但在第二种情况下,它会破坏缓存并再次执行查询,刷新产品和交叉销售,并且 UI 已正确更新。
我真的很享受将 urql 钩子与 React 组件一起使用的体验,并想继续,但我不确定如何在不使用其他工具的情况下解决这个问题。
我尝试使用以下提示在表单提交时强制重新渲染:如何强制组件在 React 中使用钩子重新渲染?但它遇到了同样的问题,Products
它将再次从缓存中获取并crossSells
返回一个空数组。我考虑过将 urql 的 RequestPolicy 修改为仅网络,以及强制重新渲染,但我认为每次重新获取都会不必要地昂贵。我现在正在尝试的解决方案是将所有状态转移到 redux 中,这是一个单一的事实来源,以便任何更新crossSells
都能正确传播,尽管我确信它会起作用,但这也意味着我将换取一个标准 redux 样板的钩子给我带来了很多便利。
如何在提交表单时优雅地更新Products
with ,同时仍然使用 urql 和钩子?crossSells
CrossSellForm
javascript - 可以为 urql 设置自定义标题吗?
Github GraphQL v4 API 具有所谓的模式预览,您可以在其中使用新的模式功能 - 但它需要自定义Accept
标头。
我以前用过 Apollo 客户端,但我想用 Formidables urlq试试这个新应用。有没有办法用 urql 客户端设置客户标头?
更新
我认为这已经进入代码库,只是没有记录 - https://github.com/FormidableLabs/urql/pull/96/files
javascript - Svelte,只重新渲染列表中的一个项目,而不是整个列表
无论是svelte-apollo
(https://github.com/timhall/svelte-apollo/issues/19)和@urql-svelte
(https://github.com/FormidableLabs/urql/issues/704)我都会重新渲染整个列表只是一个元素重新渲染。
复制步骤:
转到 REPL:https ://codesandbox.io/s/urql-svelte-list-rerendering-uwsvn
点击一个按钮
每个按钮重新渲染;所以整个列表重新渲染自己
我希望它只重新呈现我单击的按钮
如果我在这里阅读:https://svelte.dev/tutorial/svelte-options,我可以通过以下方式理解:
immutable={true} - 你从不使用可变数据,因此编译器可以进行简单的引用相等检查以确定值是否已更改
immutable={false} — 默认值。Svelte 对于可变对象是否发生变化会更加保守
如果您看到示例,他们正在更改todos
数组,就像我们也在做的那样urql
:
为什么它不适用于我的 REPLtodos
示例?
最后是todos
一个新数组吗?
javascript - Urql 错误:无法读取未定义的变量名的属性,并且我正确定义了它
这是我的问题:
'GraphQuery' 变量是一个看起来像这样的对象
接受变量的 Playground 上的 graphql 查询如下所示
但我不断得到的错误是
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连接)。
graphql - URQL - GraphQL 如何获取响应标头
当我对 GraphQL 服务器进行查询时,我想读取 http 响应标头中设置的信息。
当我使用 urql 客户端执行查询时,我只得到这些信息:
有没有办法获取响应标头?
javascript - @urql/svelte,“在组件初始化之外调用的函数”如果不在 onMount 中
我正在尝试https://github.com/FormidableLabs/urql/tree/master/packages/svelte-urql伙计们完成的令人惊叹的工作。
直到今天的问题,一切都很好。
我正在使用下面的代码,它给了我这个错误:
代码:
你能提出什么问题吗?
如果我使用它就可以await()
了onMount()
!像这样:
这里的代码@urql/svelte
:
- query.ts:https ://github.com/FormidableLabs/urql/blob/master/packages/svelte-urql/src/operations/query.ts
- context.ts:https ://github.com/FormidableLabs/urql/blob/master/packages/svelte-urql/src/context.ts
也许是context
代码?
如果您需要,我可以在 CodeSandbox 上创建一个 REPL,没问题。
错误@urql/svelte
:https://github.com/FormidableLabs/urql/issues/795。
有关您的 Svelte 项目的信息: - Chrome 83 - Svelte 版本:3.23.0 - 汇总
javascript - urql useQuery 的暂停选项不会暂时冻结请求
我正在尝试使用以下代码一次执行 urql useQuery 。但由于某种原因,每次重新渲染都会调用它。
根据文档https://formidable.com/open-source/urql/docs/basics/queries/#pausing-usequery ,此查询最初应在渲染时暂停,并且仅在从 React.useEffect 调用时才应执行山。
使用 urql 一次执行查询的最佳方法是什么?
reactjs - 在 Jest 中模拟 URQL 的获取状态
我试图在我的测试中模拟获取状态。成功模拟了有数据的状态和有错误的状态。您可以在下面找到一个示例:
该组件如下所示:
我不知道我做错了什么。当我运行测试时,它说fetching
is false
。任何帮助,将不胜感激。
svelte - 以异步方式为 Svelte 初始化 URQL(我需要将 schema.json 拆分为单独的块)
我正在使用 Svelte 和 URQL。
我在这里使用你的包文件夹中的 svelte 示例,除了我format: 'esm'
在我的rollup.config.js
.
当我在我的代码中使用时,我的 Rollup 已经将我的最终包代码分割成块import('./Component.svelte')
。
我很难做的是异步初始化 urql,如下所示:
如果我使用类似的东西:
App.svelte
并从中调用它;(async () => await initURQL())()
会给我错误:
我怎样才能解决这个问题?