2016-08-04 4 views
4

나는 반항 원주민과 함께 릴레이를 사용 중이며 로그인 중에는 & 로그 아웃 중에 문제가 있습니다.릴레이 환경을 사용하는 돌연변이

로그인 또는 로그 아웃 후 릴레이는 이전 사용자와 저장소를 유지합니다. 이를 해결하기 위해 Relay.RendererRelay.Environment을 사용합니다. 에서처럼, 각각의 RendererEnvironment의 싱글 톤 객체를 넣었습니다.

문제는 이전에 의 개체에서 돌연변이를 수행 한 것이므로 Relay.Store.commitUpdate(new CreateProfile(), callback)입니다.

이제 작동하지 않습니다. 나는 Relay.Store이 서버 끝점에 대해 아무것도 모르기 때문에 이것이라고 생각합니다. 하지만 Relay.Environment은 그렇지 않습니다.

그리고 지금은 this.props.relay.commitUpdate(new CreateProfile(), callback)과 같은 것을 사용하고 있습니다. 부모 구성 요소가 Relay.Container으로 감싸 졌을 때 매우 잘 작동하므로 소품에 릴레이 객체가 있습니다.

하지만 Relay.Containers이 아니며 소품에 Relay 개체가 없으면 어떻게해야합니까?

답변

1

Relay.Store은 글로벌 환경에서 Relay.EnvironmentRelay.Store.commitUpdate() 데이터를 업데이트하는 전역 적으로 액세스 가능한 싱글 톤 인스턴스입니다. 그러나 자신의 인스턴스 인 Relay.Environment을 사용하고 있으므로이를 업데이트하기 위해 명시된대로 this.props.relay.commitUpdate()을 사용해야합니다. 이것은 컨테이너가 렌더링 된 환경을 업데이트합니다.

Relay.Container에 싸여 있지 않은 컨테이너의 하위 구성 요소에서 돌연변이를 만들 필요가있는 경우 두 가지 방법이 있습니다. 당신은 단순히 그들에게 relay 소품을 통과 할 수 있으므로 용기의 렌더링 기능에 당신이 가진 것 :

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

을하지만, 그 일반 구성 요소가 릴레이 컨테이너에 아니기 때문에, 그들은 현재 알 필요가 없습니다 릴레이에 관한 것. 당신이 그 (것)들에게 그 방법을 유지하려면, 당신은 다음과 같이 컨테이너 구성 요소에서 업데이트를 수행하는 방법을 쓸 수있다 :

onCreateProfile =() => { 
    this.props.relay.commitUpdate(new CreateProfile()); 
}; 

을 만 render에 아이 컴퍼넌트에 콜백을 전달합니다

<Child onCreateProfile={this.onCreateProfile} /> 

구성 요소 계층에서 상위에 이없는 구성 요소로부터 변이를 만들어야하는 경우 공유 루트 구성 요소의 위쪽에 Relay.Environment을 만들고이를 소품을 사용하여 전달하거나 위에 표시된 전략을 사용하는 콜백).