2017-05-19 5 views
1

나는 여기에 nested navigation recipe을 따라 매끄러운 React Navigation을 사용하고 있지만, 내 탐색에 'this'를 전달하는 법을 모르겠습니다. 나의 무지를 유감스럽게 생각합니다. React Native : 중첩 된 내비게이션에 소품 전달

class MyApp extends Component { 
    render() { 
    return (
     <StackNavigation 
     screenProps={this.state} 
     /> 
    ) 
    } 
} 

const MainScreenNavigator = TabNavigator(
    { 
    Awesome: { screen: Awesome } // How do I pass this.state? 
    } 
) 

const routesConfig = { 
    Home: { screen: MainScreenNavigator }, 
    Profile: { screen: Profile } 
} 

const StackNavigation = StackNavigator(routesConfig, {initialRouteName: 'Home'}) 

그래서 어떻게 내 MainScreenNavigator에 this.state를 전달하지 : 여기

내 일반적인 구조 개요입니까?

답변

1

상태를 그대로 전달할 수 있는지 확실하지 않습니다. 다음과 같이 전달 된 params를 다음 화면에 액세스 할 수 있습니다 .. 그러나 당신이이

this.props.navigation.state.params.<<property passes>> 
4

this에 따르면, 당신은 StackNavigatorConfig에 StackNavigator에 추가 옵션을 전달할 수 있습니다 시도 할 수 있습니다. 이런 식으로 뭔가 : 거 야 초기 경로의 모든 당신의 상태을 통과한다

{ initialRouteName: 'Home', initialRouteParams: {...this.state} }

그리고 그 다음 StackNavigatorConfig 객체처럼

const StackNavigation = StackNavigator(routesConfig, StackNavigatorConfig)

... 네비게이터.

를 들어 다른 경로 당신은 할 수 있습니다 :

this.props.navigation.navigate('SomeScreen', {<the-greatest-object-for-pass-down>})

을 그리고 그 거 패스 입니다 - 큰 객체를 위해 통과 다운SomeScreen.

마지막으로 의 매개 변수에 (초기 및 다른 모든 화면)의 this.props.navigation.params으로 액세스 할 수 있습니다.

+0

내 생각에 'const StackNavigation'은 App 구성 요소 외부에서 선언되므로'this'의 컨텍스트가없고 'this'는 사용할 수 없습니다. – AlxVallejo

+0

Youre right, 나는 지금까지 깨닫습니다. 하지만 ... 구체적으로 무엇을하고 싶니? 그리고'screenProps'가 당신의 문제를 해결하지 못하는 이유는 무엇입니까? –

+0

이렇게 * 초기 렌더링에서 * 작동하지만 해당 소품이 수정 된 경우 (예 : 루트 구성 요소의 상태를 수정하여) 하위 화면이 다시 렌더링되지 않는 것으로 나타났습니다. 네비게이터가 소품을 업데이트하도록 강제 할 여지가 있습니까? –

관련 문제