问题标签 [relayjs]
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 - 继电器中的道具prepareVariables?
嗨,我可以访问容器上 prepareVariables 中的道具吗?
我有一个递归结构:
在根上,我将第一级扩展为:
我想保留整个状态并在以后恢复它。我已经涵盖的保留状态,我将带有状态的对象树传递给所有节点。所以我希望能够在prepareVariables中做到这一点:
我尝试使用构造函数:
但随后中继抱怨提供的预期道具location
将由LocationList
中继获取数据。
这可能吗 ?
relayjs - 收到 setVariables 回调后的 props 值
我对以下场景有疑问:如果您使用setVariables
中继道具中的方法并更改变量的方式,则中继必须从服务器检索其他数据(例如,单击以下操场示例中的“加载更多故事”接力游戏)。
我希望在收听readyState
带有值的回调之后ready = true
,done = true
道具包含新获取的信息。就像在操场上的例子一样,在numStoriesToLoad
将初始值 3 增加 1 之后,道具viewer.storyFeed.edges.length
是 4。
实际发生的是,即使在收到命名回调之后,道具仍然具有旧值。如果这种行为是故意的,你如何链接setVariables
依赖于前一个调用结果的调用?
reactjs - 多个中继容器和变量通信
我正在尝试从另一个中继容器更改中继容器的变量。它们没有父子关系,并且都位于两个单独的根容器中。
假设我描述的场景:从上面的 Container 和另一个 Container 更改 $value 变量的最佳方法是什么?有办法只使用 Relay 还是我需要 Redux(或 Reflux)来完成这项工作?
谢谢!
reactjs - “教”客户端用于 graphql 的端点
我正在调整它以在 hapi 服务器的上下文中工作,该服务器还定义了许多其他“常规”api 端点。如果我想以这种方式为 graphql 定义一个端点(类似于 README):
...然后是否需要在客户端代码中进行其他配置以“教”反应/中继应用程序发出他们的发布/获取请求的路径?
relayjs - 如何避免在 Relay Mutations 中往返大量数据?
假设我有一个 React 组件,它控制textarea
包含博客文章内容的 a。当用户更改博客文章时,我使用以下内容更新 Relay Store Mutation
:
问题:每次我用 Mutation 更新 Store 时,Relay 都会往返于后端往返整个博客文章!假设帖子为 50KB,即使每次去抖动编辑的去抖动为 50KB + 一些字节。有没有办法避免这种情况?
我进行了一些实验,但还没有找到有效的解决方案。我尝试使用带有空有效负载且没有字段配置的乐观响应,但这看起来很奇怪,并且在受控的textarea
.
relayjs - 使用中继的搜索功能
如何使用中继实现搜索功能?
所以,工作流程是
- 用户导航到
search form
。
初始化视图时不应有任何查询(如在中继容器中)。
- 用户填写字段值,然后按操作/搜索按钮。
中继查询被发送到服务器
- 从服务器接收结果。
filtered
页面显示它并中继将结果与本地缓存相协调。
我没有看到 ad hoc 查询的示例,而只是中继容器的一部分(它在组件初始化之前解析)。那么,如何建模呢。它应该像突变吗?
pagination - 中继分页:如何初始化“之后”值?
所以基于这里的评论,我已经能够一起破解一个简单的“分页”组件/容器:https ://github.com/facebook/graphql/issues/4#issuecomment-118162627
我说“hack”是因为我就是这么做的。
我通过查看/graphql
浏览器响应中的边缘光标来使其工作。问题是..当我没有“事先查询”可以使用时,如何使这项工作适用于项目的第一“页”?
我尝试在查询中离开after
,undefined
但只收到以下错误:
未捕获的不变违规:callsFromGraphQL():预期变量 $curs 的声明值。
看来,如果您在容器的片段中定义first
和after
,那么它们是必需的参数。但是我对 没有任何价值after
,那么到底要如何初始化呢?
这个例子抛出了上面的错误:
reactjs - 具有通量模式的中继缓存?
我真的很想将 Relay 缓存合并到我的 Flux 存储中,这样我就可以进行“时间旅行”并深入了解应用程序。
看起来中继存储和动作都是不可序列化的类,这很糟糕。但看起来我应该能够将缓存与网络请求分开并将缓存保存在 Flux 存储中。
这听起来很有趣还是我在叫错树?
reactjs - RelayJS:查询任意数据的子组件
我正在构建一个包含许多不同小部件的仪表板。用户可以添加和删除任何小部件,并以他们喜欢的任何顺序放置它们。每个小部件都有自己的数据需求。构建容器层次结构的正确中继方式是什么?
为了提供一些上下文,这是迄今为止的架构:
Widget
是一个组件,它接受一个配置对象并相应地渲染相应的组件。
Dashboard
组件包含用户添加的许多小部件。
更新
我试图让每一个都ActualWidget
成为一个观众的领域。所以架构有点像这样:
然后对于我的Widget
容器,我尝试动态插入片段。
那是行不通的。我相信 Relay 静态解析了 QL,因此它无法组成动态片段。然而,这只是我的猜测。
我正在测试RootContainer
每个小部件使用的可行性,并将很快更新。
relayjs - 通过 Relay 中的 GraphQL 突变处理父节点的破坏
我很好奇处理大部分图形可能受到影响的突变的“正确”方法。最好的例子是删除“父”节点导致删除一堆它的孩子。现有的突变配置(FIELDS_CHANGED、NODE_DELETE 等)对于相对简单的操作来说已经足够了,但我不确定处理更复杂的事情的正确方法。
一个具体的例子会有所帮助。假设我们正在开发经典的 Relay 示例应用程序,并且正在使用三种特定类型:Ship
、Faction
和User
。让我们假设Ships
属于一个Faction
(多对一)并且Users
有一个favorite_ships
连接(多对多)。伪模式可能是这样的:
好吧,酷。我们有一个Faction
名为“帝国”的船,它的连接中有一堆船,如“领带战斗机”、“星际驱逐舰”等。然后我们有一个User
最喜欢的船只,其中包括“领带战斗机”通过favorite_ships
连接。
到目前为止一切都很好。现在一些朋克出现并Faction
通过DestroyFactionMutation
. 所述突变的输入相当简单:Faction
id,但突变对后端的影响很大:
- 给定
Faction
节点被删除 - 所有关联的
Ship
节点也被删除 - 所有关联的
User { favorite_ship }
条目也被删除
因此,我的问题是:如何编写突变有效负载、胖查询和突变配置以使用 Relay 对其进行建模?
想了一会儿,我想大概是这样的:
然后客户端会像这样更新:
- 添加一个 NODE_DELETE 配置以删除与
Faction
对应的节点destroyedFactionId
,这是有据可查且直截了当的 - 添加一个 NODE_DELETE 配置以删除与该配置相对应的节点
Ship
,destroyedShipIds
但使用什么parentID
?您是否需要为每个affectedUserIds
. - 如果 #2 不是真的那样工作,也许你可以添加一个 FIELDS_CHANGE 配置,指定
user { favorite_ships }
可以改变,给定affectedUserIds
(也可能通过 REQUIRED_CHILDREN 获取?)
抱歉,如果这是漫无边际且不清楚;希望这种“类型”的突变对于使用 Relay 时间较长的人来说是熟悉的。我可以尝试这些选项,但我想要一些关于这种事情的“最佳”方法的建议。谢谢!