问题标签 [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.
graphql - 如何订阅relay/graphql突变的进度事件
我也想使用突变来上传文件,但是我找不到任何方法来跟踪突变的进度(它的上传,类似于 XMLHttpRequest 进度事件)。Afaik 中继正在使用 fetch,但 fetch 没有提供任何跟踪进度的方法(https://github.com/whatwg/fetch/issues/21)。
那么,最好的解决方案是什么?编写一个使用 XMLHttpRequest 的自定义网络层?但是话又说回来,如何将请求对象的引用返回给...的调用者Store.commitUpdate
?
reactjs - 从外部存储中检索 Relay 查询片段的变量
在编写 GraphQL 查询片段作为 a 的一部分时RelayContainer
,我一直在努力解决如何在某些情况下设置查询变量。文档中概述的基础知识非常简单。但是考虑到这些查询的静态特性以及 a 如何RelayContainer
是高阶 React 组件,当查询所需的输入是来自外部源(例如 Redux 存储)的对象时,我不确定处理这个问题的最佳方法。在组件加载之前,我没有任何方法从该存储中检索数据,因此作为一种解决方法,我一直在使用该@include
指令并在组件加载后将就绪变量设置为 true:
最后,这按预期工作,但我担心这更像是一种黑客行为,并且我错过了 Relay 应该如何处理查询变量的重要信息。有一个更好的方法吗?prepareVariables看起来很有用,但我仍然无法访问我的数据存储。这是我明显的选择:
- 保持原样
- 将其转换为将在组件生命周期方法中执行的突变。我宁愿不这样做,因为它会删除与组件的数据绑定。
- 使用自定义
RelayNetworkLayer
(可以访问我的商店)来拦截我的查询并从那里的外部商店设置变量。这也感觉像一个黑客。
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.js
看isClientID:function(e){return e.startsWith("client:")}
..这似乎是失败的功能。
有没有人遇到过这个?关于修复的任何想法或可能导致它的原因?
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"}]
它从不通过提琴手发送请求或在网络服务中捕获
relayjs - 中继路由器,在第一次渲染时弃用获取
我遇到了下一个问题。在my app
我使用中继、自定义网络层和中继路由器
对于普通route
我声明查询,获取一些数据:
在分配之前component
,router
我有下一个中继容器:
默认情况下它会获取{query { viewer } }
,因为
$isNoDataCached 是 false。
并返回
500 错误。
那么,如果我不需要获取数据,有什么方法可以停止数据获取?
reactjs - React 中继磁盘缓存
我已经使用 GraphQL API 对本机应用程序做出反应,其中使用 react-relay 库。而且我需要对应用程序实现磁盘缓存,我看到请求已经在运行时缓存,但是在重新加载应用程序之后,请求再次从服务器重新加载数据但需要从缓存中获取。
graphql - schema.graphql 与 buildSchema()
遵循Relay Modern文档,首先我开始使用该buildSchema()
函数并将我的模式和rootValue放在 JavaScript 文件中,并在需要时使用它。
后来我发现relay-compiler
需要一个 JSON 或.graphql
格式的模式文件;所以我复制了我的模式schema.graphql
,一切都按预期工作。
为了避免在两个地方维护我的架构,我可以读取schema.graphql
文件并将其传递给buildSchema()
函数,它应该可以工作,但我想知道这是否是正确的方法,或者是否有更好的方法?有什么办法可以完全避免使用buildSchema()
函数而完全依赖schema.graphql
?
react-native - 中继现代缓存示例
我想在我的反应本机应用程序中启用缓存。我正在使用带有现代中继的 GraphQL。我发现在现代中继中默认情况下不启用缓存,但它们已经暴露RelayQueryResponseCache
在relay-runtime
中,我们可以将其添加到fetchQuery
API 中的函数中。我在这里和这里阅读了关于它的讨论,但还没有看到任何开始的例子。有人可以帮我解决这个问题吗?
编辑:
好的,我想出了一个解决方案。我认为它遗漏了一些东西,但到目前为止它满足了我们的需求。我注意到将任何内容传递QueryRenderer
给cacheConfig
结果,然后将该值传递给fetchQuery
我环境中的函数。因此,我创建了一个Component
通过某种关系加载数据并将其解析为json
查询请求的正确结构的方法。然后我将它返回到状态。然后我用创建的“缓存加载器”扩展了我的Component
内容。QueryRenderer
现在当componentWillMount()
被调用时,我要求缓存数据。在此期间我已经设置this.state.loading = true
,所以我能够处理加载状态。从数据库读取是异步的。我也在其他组件中使用这个类。每个人都处理其缓存数据。我只是把它传给QueryRenderer
.
但是,我认为这需要为每个Component
受此缓存支持的逻辑添加一些额外的逻辑。可能将缓存解析器作为cacheConfig
并立即在环境中解析缓存的数据会更干净。
graphql - 中继重取不显示结果
我正在尝试创建一个实时搜索结果组件(延迟加载一个)。它第一次完美运行,但重新获取不会更新数据。我在标签中看到了请求和响应Network
!所以它确实获取了数据,但它不将其提供给组件!
知道为什么吗?
javascript - 突变后如何使Relay的缓存失效
我正在使用 React/Relay/GraphQL 重建一个小型内部 Web 应用程序以熟悉此堆栈。基本上,它监控“活动”视频列表的分析。唯一的变化是用新列表替换活动视频 ID 列表。问题是在替换了 ID 之后,Relay 继续传递旧的 ID 列表而不是新的。
我一直无法弄清楚如何操作传递给commitMutation()
'supdater
和optimisticUpdater
回调的商店。我只需要清除存储的活动视频列表,以便它知道调用一个新视频,或者让它重新运行 graphql 查询以刷新缓存。
具体来说,我需要清除此查询的结果:
突变(TypeScript):
和架构: