react-native - 使用中继环境的突变

标签 react-native graphql relayjs

我正在将 Relay 与 React Native 一起使用,并且在登录和注销过程中遇到问题。

登录或注销后,Relay 保留前一个用户的商店。为了解决这个问题,我使用 Relay.RendererRelay.Environment .就像在每个 Renderer 中一样我放了 Environment 的单例对象.

问题是我之前对 Relay.Store 的对象做了突变,如Relay.Store.commitUpdate(new CreateProfile(), callback) .

现在它不起作用。我猜这是因为 Relay.Store对服务器端点一无所知。但是Relay.Environment做。

现在我正在使用这样的东西 this.props.relay.commitUpdate(new CreateProfile(), callback) .当父组件被包装为 Relay.Container 时,它工作得很好。 ,所以它在 Prop 中有中继对象。

但是我应该在不是 Relay.Containers 的组件中做什么并且没有 Relay Prop 中的对象?

最佳答案

Relay.StoreRelay.Environment 的全局可访问单例实例和 Relay.Store.commitUpdate()更新该全局环境中的数据。但是由于您使用的是自己的 Relay.Environment 实例, 要更新它,您需要使用 this.props.relay.commitUpdate() ,正如你所指出的。这会更新渲染容器的环境。

如果需要从容器的子组件中进行更改 ,没有包裹在 Relay.Container 中,有两种方法可以做到这一点。您可以简单地通过 relay支持它们,因此在容器的渲染功能中,您将拥有:

<Child relay={this.props.relay} />

但是,由于这些普通组件不在 Relay 容器中,因此它们目前不需要了解有关 Relay 的任何信息。如果您想保持这种状态,您可以编写在容器组件中执行更新的方法,如下所示:
onCreateProfile = () => {
  this.props.relay.commitUpdate(new CreateProfile());
};

并且只在 render 中将回调传递给您的子组件:
<Child onCreateProfile={this.onCreateProfile} />

如果您需要从没有 Relay.Container 的组件中进行更改在它上面的组件层次结构 完全可以创建 Relay.Environment在更高的共享根组件中并使用 props 向下传递它(或使用上面显示的策略传递回调)。

关于react-native - 使用中继环境的突变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38769841/

相关文章:

node.js - React-native:看起来你在全局安装了 react-native

javascript - javascript && 运算符如何工作

relayjs - 是否可以在 Relay 中进行延迟加载?

reactjs - react native 异步存储 : Cannot resolve promise returned by getItem

graphql - Gatsby 内容丰富的嵌入图像

node.js - graphql + apollo-server-express,如何处理 express authMiddleware 中的身份验证错误?

java - Maven 和 graphql-java

relayjs - Relay 与 Flux 的关系是什么?

android - React-native + Relay.js 的稳定构建

react-native - 在 IOS 中运行 React Native 应用程序时出错