React native 使用中继环境的突变

React native 使用中继环境的突变,react-native,graphql,relayjs,React Native,Graphql,Relayjs,我正在使用React Native的中继,在登录和注销过程中出现问题 登录或注销后,Relay会阻止前一个用户访问存储区。为了解决这个问题,我使用了Relay.Renderer和Relay.Environment。如中所示,在每个渲染器中我放置了环境的单例对象 问题是我之前对Relay.Store的对象进行了一次变异,如中所示 Relay.Store.commitUpdate(新建CreateProfile(),回调) 现在它不起作用了。我想这是因为Relay.Store对服务器端点一无所知。但

我正在使用React Native的中继,在登录和注销过程中出现问题

登录或注销后,Relay会阻止前一个用户访问存储区。为了解决这个问题,我使用了
Relay.Renderer
Relay.Environment
。如中所示,在每个
渲染器中
我放置了
环境
的单例对象

问题是我之前对
Relay.Store
的对象进行了一次变异,如中所示
Relay.Store.commitUpdate(新建CreateProfile(),回调)

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

现在我使用的是类似这样的
this.props.relay.commitUpdate(newcreateprofile(),callback)
。当父组件包装为
Relay.Container
时,它工作得非常好,因此它在props中有Relay对象


但是,对于那些不是
Relay.Containers
且道具中没有
Relay
对象的组件,我应该怎么做呢?

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

如果需要从容器的子组件中进行突变,而这些子组件未包装在
中继容器
中,则有两种方法。您只需将
中继
道具传递给它们即可,因此在容器的渲染功能中,您可以:

<Child relay={this.props.relay} />
并且只在
渲染中向子组件传递回调:

<Child onCreateProfile={this.onCreateProfile} />

如果您需要对组件层次结构中其上方没有
中继.Container
的组件进行变异
,您可以在共享根组件中创建
中继.Environment
,并使用道具向下传递(或使用上面显示的策略传递回调)

<Child onCreateProfile={this.onCreateProfile} />