问题标签 [react-relay]

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 回答
956 浏览

graphql - 如何订阅relay/graphql突变的进度事件

我也想使用突变来上传文件,但是我找不到任何方法来跟踪突变的进度(它的上传,类似于 XMLHttpRequest 进度事件)。Afaik 中继正在使用 fetch,但 fetch 没有提供任何跟踪进度的方法(https://github.com/whatwg/fetch/issues/21)。

那么,最好的解决方案是什么?编写一个使用 XMLHttpRequest 的自定义网络层?但是话又说回来,如何将请求对象的引用返回给...的调用者Store.commitUpdate

0 投票
1 回答
351 浏览

reactjs - 从外部存储中检索 Relay 查询片段的变量

在编写 GraphQL 查询片段作为 a 的一部分时RelayContainer,我一直在努力解决如何在某些情况下设置查询变量。文档中概述的基础知识非常简单。但是考虑到这些查询的静态特性以及 a 如何RelayContainer是高阶 React 组件,当查询所需的输入是来自外部源(例如 Redux 存储)的对象时,我不确定处理这个问题的最佳方法。在组件加载之前,我没有任何方法从该存储中检索数据,因此作为一种解决方法,我一直在使用该@include指令并在组件加载后将就绪变量设置为 true:

最后,这按预期工作,但我担心这更像是一种黑客行为,并且我错过了 Relay 应该如何处理查询变量的重要信息。有一个更好的方法吗?prepareVariables看起来很有用,但我仍然无法访问我的数据存储这是我明显的选择:

  1. 保持原样
  2. 将其转换为将在组件生命周期方法中执行的突变。我宁愿不这样做,因为它会删除与组件的数据绑定。
  3. 使用自定义RelayNetworkLayer(可以访问我的商店)来拦截我的查询并从那里的外部商店设置变量。这也感觉像一个黑客。
0 投票
0 回答
190 浏览

reactjs - React-Relay 旧版浏览器支持(空白站点)

我有一个 react-relay graphql 应用程序可以在新浏览器上完美运行,但在 safari 5.1.10 (2013) 上它不起作用。该网站只是白色的。旧版本的 chrome 也会发生同样的情况。

控制台给出: TypeError: 'undefined' is not a function (evaluating 'e.startsWith("client:")')

我看了react-relay/dist/relay.min.jsisClientID:function(e){return e.startsWith("client:")}..这似乎是失败的功能。

有没有人遇到过这个?关于修复的任何想法或可能导致它的原因?

新错误

0 投票
1 回答
21 浏览

react-native - 将 Relay 突变与文件一起使用的问题

我在使用带有 Relay 的 File Mutation 时遇到问题。我正在尝试使用 getFiles() 创建突变

}

transaction TypeError: Network request failed at XMLHttpRequest.xhr.onerror (D:\ReactNative\MedexApp\node_modules\react-native\node_modules\whatwg-fetch\fetch.js:436) 尽管所有其他请求都运行良好,但我总是收到一个错误 消息。同样的突变也可以正确发送而无需附加任何文件。这是文件数组,["1489322712989.jpg":{filename:"1489322712989.jpg" uri:"file:///storage/emulated/0/Pictures/1489322712989.jpg"}] 它从不通过提琴手发送请求或在网络服务中捕获

0 投票
0 回答
29 浏览

relayjs - 中继路由器,在第一次渲染时弃用获取

我遇到了下一个问题。在my app我使用中继、自定义网络层和中继路由器

对于普通route我声明查询,获取一些数据:

在分配之前componentrouter我有下一个中继容器:

默认情况下它会获取{query { viewer } },因为 $isNoDataCached 是 false

并返回

500 错误。

那么,如果我不需要获取数据,有什么方法可以停止数据获取?

0 投票
1 回答
136 浏览

reactjs - React 中继磁盘缓存

我已经使用 GraphQL API 对本机应用程序做出反应,其中使用 react-relay 库。而且我需要对应用程序实现磁盘缓存,我看到请求已经在运行时缓存,但是在重新加载应用程序之后,请求再次从服务器重新加载数据但需要从缓存中获取。

0 投票
1 回答
175 浏览

graphql - schema.graphql 与 buildSchema()

遵循Relay Modern文档,首先我开始使用该buildSchema()函数并将我的模式rootValue放在 JavaScript 文件中,并在需要时使用它。

后来我发现relay-compiler需要一个 JSON 或.graphql格式的模式文件;所以我复制了我的模式schema.graphql,一切都按预期工作。

为了避免在两个地方维护我的架构,我可以读取schema.graphql文件并将其传递给buildSchema()函数,它应该可以工作,但我想知道这是否是正确的方法,或者是否有更好的方法?有什么办法可以完全避免使用buildSchema()函数而完全依赖schema.graphql

0 投票
0 回答
1434 浏览

react-native - 中继现代缓存示例

我想在我的反应本机应用程序中启用缓存。我正在使用带有现代中继的 GraphQL。我发现在现代中继中默认情况下不启用缓存,但它们已经暴露RelayQueryResponseCacherelay-runtime中,我们可以将其添加到fetchQueryAPI 中的函数中。我在这里这里阅读了关于它的讨论,但还没有看到任何开始的例子。有人可以帮我解决这个问题吗?

编辑:

好的,我想出了一个解决方案。我认为它遗漏了一些东西,但到目前为止它满足了我们的需求。我注意到将任何内容传递QueryRenderercacheConfig结果,然后将该值传递给fetchQuery我环境中的函数。因此,我创建了一个Component通过某种关系加载数据并将其解析为json查询请求的正确结构的方法。然后我将它返回到状态。然后我用创建的“缓存加载器”扩展了我的Component内容。QueryRenderer现在当componentWillMount()被调用时,我要求缓存数据。在此期间我已经设置this.state.loading = true,所以我能够处理加载状态。从数据库读取是异步的。我也在其他组件中使用这个类。每个人都处理其缓存数据。我只是把它传给QueryRenderer.

但是,我认为这需要为每个Component受此缓存支持的逻辑添加一些额外的逻辑。可能将缓存解析器作为cacheConfig并立即在环境中解析缓存的数据会更干净。

0 投票
0 回答
415 浏览

graphql - 中继重取不显示结果

我正在尝试创建一个实时搜索结果组件(延迟加载一个)。它第一次完美运行,但重新获取不会更新数据。我在标签中看到了请求和响应Network!所以它确实获取了数据,但它不将其提供给组件!

知道为什么吗?

0 投票
1 回答
1855 浏览

javascript - 突变后如何使Relay的缓存失效

我正在使用 React/Relay/GraphQL 重建一个小型内部 Web 应用程序以熟悉此堆栈。基本上,它监控“活动”视频列表的分析。唯一的变化是用新列表替换活动视频 ID 列表。问题是在替换了 ID 之后,Relay 继续传递旧的 ID 列表而不是新的。

我一直无法弄清楚如何操作传递给commitMutation()'supdateroptimisticUpdater回调的商店。我只需要清除存储的活动视频列表,以便它知道调用一个新视频,或者让它重新运行 graphql 查询以刷新缓存。

具体来说,我需要清除此查询的结果:

突变(TypeScript):

和架构: