没有数据的中继容器
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),而不是引用全局环境。”似乎他们不希望您导入这样的全局环境。以上是关于没有数据的中继容器的主要内容,如果未能解决你的问题,请参考以下文章