问题标签 [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.
react-native - 使用 Relay 和 React-Native 时的条件片段或嵌入的根容器
我已经开始relay
使用react-native
,但我对如何最好地利用中继路由和根容器感到困惑,尤其是在使用Navigator
渲染多条路由的时候。
参加以下课程:
然后在我的父路由中请求User
构建查询的片段。
问题是片段将包括由first
和second
组件定义的那些字段,即使一次只显示其中一个。
在这种情况下,我应该:
Relay.RootContainer
1)在renderScene
回调中返回另一个?Relay.RootContainers
嵌入彼此之间通常是一个坏主意吗?
2) 使用条件变量来包含片段?
或者有其他建议吗?
javascript - 您如何为 ORM 的分页定义中继连接?
我浏览了 Relay 的所有文档,似乎没有关于如何使用 ORM 建立 Relay 连接的简单说明。如果您将数据存储在内存中,所有示例似乎都使用这种connectionFromArray
方法很好,但是当您将数据存储在数据库中时,您将如何提供连接分页工作所需的信息?
javascript - Relay 使用什么来决定将哪些 outputFields 包含在突变响应中?
我正在通过修改 TODO 示例来创建我的第一个 React/Relay 应用程序。我已经到了为具有参数 bookCount 的对象分发器添加自己的突变的地步。变异被称为 AddBook 并且只是将书籍计数增加 1。此时,变异执行没有错误,乐观地将 bookCount 正确地增加 1,但是当它收到来自服务器的响应时恢复模型更改。我相信这是因为来自服务器的响应神秘地不包含我指定的任何输出字段。
这是我的突变:
它在 outputFields 中包含字段“distributor”,但 graphql 响应中不包含“distributor”数据。
graphql 响应是:
我已经验证了 mutateAndGetPayload 函数会被调用,但分发器解析函数不会被调用。
我本来希望 outputFields 中的每个字段都包含在 graphql 响应中,并且 outputFields 中的每个解析函数都被调用以填充响应中的适当参数,但事实并非如此
这让我特别困惑,因为生成的 schema.json 确实包含我在 AddBookPayload 中指定的任何 outputFields:
graphql - 连接中的不透明游标是否应该在不同的字段参数中保持稳定?
RANGE_ADD
突变需要一个,edgeName
以便它可以将新边缘插入客户端连接。作为其查询的一部分,它还包括cursor
.
问题是服务器无法知道客户端在生成边缘响应时可能会将哪些参数应用于连接。
这是否意味着cursor
应该是稳定的?
graphql - 在 relay/graphql 中获取特定列表项的附加信息
使用 Relay 和 GraphQL,假设我有一个返回查看器的模式和一个嵌入的关联文档列表。根查询(由片段组成)看起来像这样:
这将允许我显示用户及其所有关联组的列表。
现在假设我希望用户能够单击该列表项,并使其展开以显示与该特定列表项关联的评论。我应该如何重组我对中继路线的查询,以便我可以收到这些评论?如果我将评论边缘添加到我的组边缘,那么它不会获取所有组的评论吗?
或者我应该更改路线查询以查找特定组?
我特别关心的是,在relay
. 即,我怎样才能有效地构造一个路由查询,它只会获取扩展列表项(或多个项目)的评论,同时仍然利用已经存在的缓存数据,并且在进行突变时会更新?上面的示例可能适用于特定的扩展组,但我不确定如何在不获取所有组项的这些字段的情况下同时扩展多个组。
laravel - 您将 CSRF 令牌放在 Relay/GraphQL 中的什么位置?
我正在尝试使用我的 Laravel 服务器设置 Relay 和 GraphQL。我已经成功地将 Laravel 设置为服务 GraphQL。
过去,为了使用 jQuery 进行 ajax 调用,我在 master.blade.php 中添加了以下内容:
并将以下内容添加到我的 main.js 文件中:
我的 GraphQL 端点当前正在返回令牌不匹配异常。在我看来,Relay 需要以与 jQuery.ajax 类似的方式将 csrf-token 传递给服务器。它去哪儿了?
reactjs - 带有整数查询参数的 RelayJS 不变违规
我对 Relay 比较陌生,所以这可能是我犯的一个简单的错误,但我已经寻找了一段时间,但我没有找到任何关于我遇到的问题的信息。
这是我从我的应用程序中得到的错误:
未捕获的错误:不变违规:GraphQLFragmentPointer:
story
查询参数的值Route
应该是一个字符串,但它被设置为10
。检查该值是否为字符串。
问题是我实际上希望它是10
并且不希望它是字符串。我是否配置错误?
这是我的 GraphQL 架构:
这是我定义的中继路线:
这就是我实例化它的方式:
relayjs - 何时使用 globalIdField
据我所知,在更改变量时,relay 依赖于 nodeDefitions 进行查询。
似乎所有具有 id 字段的对象都应该是有效节点。但是,如果我有这样的数据:
数据存储在基于文档的解决方案中,Folder 对象嵌套在 User 对象中。但是 Folder 对象被赋予了一个 id,以便其他一些对象可以在 User 的上下文中引用 Folder 对象。
如果 Folder 实现了 nodeInterface 并使用 globalIdField,那么我需要找到一种从 globalId 获取 Folder 对象的方法,这意味着我可能必须扫描所有用户才能找到它,拥有一个允许的数据映射我找到对象,或规范化数据,以便文件夹在自己的表中。如果它没有实现 nodeInterface,而只是使用字符串作为 id 字段,那么当我尝试改变 Folder 对象上的某些字段时会发生什么?
javascript - 您如何使用路由器从库存继电器转移到继电器?
我有一个当前正在运行的 React/Relay 应用程序,我想使用 react-router-relay 添加路由。当我尝试最小可能的转换时,请参阅下面的代码,我在日志中收到一个难以理解的错误:“未捕获的错误:不变违规:RelayQueryNode:无效的具体节点。”
表达这个问题的另一种可能的方法是:指定普通中继的 RelayRoutes.queries 和 react-router-relay 的路由查询的适当方法之间有什么区别?
reactjs - 了解胖查询和树结构
我在理解 Relay 中胖查询的概念时仍然有些麻烦,尤其是关于确定要重新获取哪些数据的交集逻辑部分。
到目前为止,我已经构建了一个简单的分层数据结构,它带有一个UserType
作为根查询(名为viewer
),它有许多projects
(类型ProjectConnectionType
)与之关联。每个项目都有另一个projects
字段(也是 type ProjectConnectionType
)来模拟任意嵌套的子项目层次结构。
我还有两个更高阶的 React 组件ProjectList
,并ProjectListItem
通过有条件地扩展片段(通过expanded
在我的列表项组件中使用 Relay 变量)来呈现这个结构。
到目前为止,这工作正常,我对此非常满意。棘手的部分现在是AddProject
突变。我创建了一个突变,它采用名称和parentProjectId
作为输入(对于根项目可能为空),并在服务器端的正确位置创建一个新节点。之后,它应该返回新的projectEdges
(RANGE_ADD
之后使用),以及parentProject
orviewer
以便我也可以在subprojectCount
那里更新。
对于查看器(唯一的全局根查询点),一切正常。Relay 正确计算交集并从服务器请求新数据。但是当我尝试添加一个子项目时,我一直得到一个完全空的响应,没有任何输出字段(除了突变 id)。我的猜测是,Relay 似乎因为不知道如何相应地映射该parentProject
字段而弄错了交叉点。我已经尝试为其添加FIELDS_CHANGE
配置以及parentProject: node(id: "$parentProjectId")
在我的胖查询中进行查询(这也不起作用)。
我错过了什么?我现在已经阅读了几次文档,但我仍然不理解突变的概念,我觉得已经很愚蠢了。