2017-09-25 22 views
0

登録された画面コンポーネントから現在のナビゲーション状態を取得できる必要があります。私はnavigation.stateオブジェクト内にroutesオブジェクトを見つけることを期待しましたが、そこにはありません。私は次のようにルートコンポーネントを設定することでこれを実現することができましたが、これは畳み込まれているように見えますが、これを達成するにはよりクリーンな方法が必要だと思っています。リアクションナビゲーション画面の現在のナビゲーション状態を取得する

App.js

import React, {Component} from 'react' 
import {Tabs} from './components/Routes' 
import {NavigationActions} from 'react-navigation' 


export default class App extends React.Component { 

    state = { 
     navState: null 
    } 

    componentDidMount(){ 
     const initState = Tabs.router.getStateForAction(NavigationActions.init()) 
     this.getState(null, initState); 
    } 

    getState = (prevState, newState) => { 
     let activeIndex = newState.index 
     let navState = newState.routes[activeIndex] 
     this.setState({navState}) 
    } 

    render() { 

    return (
     <Tabs 
      onNavigationStateChange={this.getState} 
      screenProps={{navState: this.state.navState}}/> 
    ) 

    } 

} 

答えて

0
<NavigationName 
    onNavigationStateChange={(prevState, newState) => { 
     this._getCurrentRouteName(newState) 
    }} 
/> 

_getCurrentRouteName(navState) { 

    if (navState.hasOwnProperty('index')) { 
     this._getCurrentRouteName(navState.routes[navState.index]) 
    } else { 
     console.log("Current Route Name:", navState.routeName) 
     this.setState({navState: setCurrentRouteName(navState.routeName)}) 
    } 
} 
+0

これは、しかし、それは時にアプリを初期化するナビゲーション状態を取得する方法をカバーしていない、素晴らしいです。これは可能ですか? – Samuel

+0

componentDidMount(){アラート(this.props.navigation.state.key)}はあなたのために機能しますか? –

+0

あなたが何を意味するか分からないので、ナビゲーションアクションがディスパッチされる前にルートコンポーネントで最初のナビゲーション状態を取得する必要があります。これは、私の例で 'const initState = Tabs.router.getStateForAction(NavigationActions.init())'がやっていることです。 'onNavigationStateChange'は、プロペラ名が示唆するようにナビゲーション状態が変化したときにのみ起動します。 – Samuel

関連する問題