没有数据的中继容器

Posted

技术标签:

【中文标题】没有数据的中继容器【英文标题】:Relay container with no data 【发布时间】:2018-01-29 19:42:14 【问题描述】:

我正在使用 Relay Modern 构建一个应用程序,作为我第一次真正涉足 React、Relay 和 GraphQL。

基本情况是,我有一个不需要任何数据的登录表单组件;也就是说,组件渲染了一个表单,并且有一个对应的mutation,但是不需要查询任何东西。

似乎在调用createFragmentContainer 时提供Relay 样式的查询片段是必要的,这反过来又确保this.props.relay 在组件上下文中不会是null

现在,我正在为登录表单使用标准(非 Relay)React 组件,但结果我无法访问 Relay 环境以将其传递给突变。

我的问题 - 有没有办法本质上传递一个“空”中继片段?还是在这种情况下推荐一些更好的成语?

【问题讨论】:

【参考方案1】:

您实际上只是使用一个普通组件,然后创建一个包含突变的突变文件。运行中继编译器为突变创建 graphql 片段,然后在表单提交中调用突变。突变确实需要您的环境。这是中继现代文档:

https://facebook.github.io/relay/docs/mutations.html

您需要将突变的结果存储在某处,然后将身份验证令牌附加到您的下一个请求中,但这应该不难做到。只需 onCompleted 并将结果存储在某处。

您的环境应该是一个单独的文件,您可以为突变和查询呈现导入该文件。只有 paginationContainer 从 queryRenderer 继承环境。

【讨论】:

大部分我已经掌握了。我的突变在它自己的文件中并且工作正常。真正唯一的问题是如何在非中继组件的上下文中获取environment,听起来你给了我一个线索。我会探索的 是的,您手动设置环境,然后在查询渲染或突变中使用它。在这种情况下,只需导入您现有的环境并再次使用它。我就是这样做的:github.com/aljones15/RelayMapToDo/blob/master/src/ToDoList/… 我不确定这是否正确。突变的relay docs 表示“为了确保在正确的环境中执行突变,建议使用组件中可用的环境(来自 this.props.relay.environment),而不是引用全局环境。”似乎他们不希望您导入这样的全局环境。

以上是关于没有数据的中继容器的主要内容,如果未能解决你的问题,请参考以下文章

中继片段变量

中继现代碎片容器,道具不自动可用

如何修复无法为“链接”创建中继容器

将变量传递给现代中继中的片段容器

无法创建中继容器; graphql.js 文件似乎有 webpack 工件?

如何从一组中继容器中组合片段?