簡體   English   中英

使用中繼環境的突變

[英]Mutations using Relay Environment

我正在使用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 ,它工作得很好,所以它在props中有中繼對象。

但是,我應該在不是Relay.Containers組件中做什么,並且在道具中沒有Relay對象?

Relay.Store是全球可訪問的單一實例Relay.EnvironmentRelay.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傳遞它(或傳遞使用上面顯示的策略進行回調。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM