简体   繁体   中英

React-navigation get current navigation state in screens

I need to be able to get the current navigation state from my registered screen components. I expected to find a routes object inside the navigation.state object but alas its not there. I have managed to get this working by setting up my root component in the following way, however this seems convoluted and i cant help but think there must be a cleaner way to achieve this.

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}}/>
    )

  }

}
<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)})
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM