2015-10-19 3 views
1

Я хочу, чтобы мой маршрутизатор на renderScene мог иметь свойство сцен/компонентов и т. Д., Чтобы скрыть панель Navigator.Скрытие и отображение Навигатора для разных сцен

К сожалению, я не могу изменить состояние навигационной панели и переделать огонь с условиями. Наверное, это из-за того, как он настроен?

export default class Root extends React.Component { 

    render(){ 
    return (
     <Navigator 
     initialRoute={Routes.SubdomainScreen} 
     renderScene={Router.renderScene} 
     configureScene={Router.configureScene} 
     navigationBar={ 
      <Navigator.NavigationBar 
      routeMapper={NavigationBarRouteMapper} 
      /> 
     } 
     style={styles.container} 
     /> 
    ) 
    } 
} 

В идеале, в маршрутизаторе, некоторые компоненты с имеют установить Панель навигации ложь, и я обновит стиль навигатора {opacity:0}. Когда/где кто-то выполнит это?

ответ

1

Вы можете использовать определения маршрута и добавить к нему свойство hideNavBar, а затем отслеживать его с помощью состояния.

export default class Root extends React.Component { 
    constructor(props) { 
    super(props); 

    this.state = { 
     hideNavBar: false, 
    }; 
    } 

    render(){ 
    let navBar = null; 

    if (! this.state.hideNavBar) { 
     navBar = (
     <Navigator.NavigationBar 
      routeMapper={NavigationBarRouteMapper} 
     /> 
    ); 
    } 

    return (
     <Navigator 
     initialRoute={Routes.SubdomainScreen} 
     renderScene={Router.renderScene} 
     configureScene={Router.configureScene} 
     onWillFocus={this.onNavWillFocus.bind(this)} 
     navigationBar={navBar} 
     style={styles.container} 
     /> 
    ) 
    } 
    onNavWillFocus(route) { 
    if (route.hideNavBar !== undefined && this.state.hideNavBar !== route.hideNavBar) { 
     this.setState({hideNavBar: route.hideNavBar}); 
    } 
    } 
} 
+0

Я переключил свой onNavWillFocus к этой одной строке: 'this.setState ({hideNavBar: !! route.hideNavBar})' Оба отлично работают! – GantMan

Смежные вопросы