2016-06-10 3 views
0

Я новичок, чтобы реагировать на родной язык, и заголовок может быть неясным.Невозможно использовать navigator.push в основном компоненте маршрута

Проблема: не может использовать this.props.navigator.push в checkLoggedInToken() функция ниже. Он говорит this.props.navigator is undefined Но я могу использовать ту же функцию в компонентах Login и Signup.

Вопрос: Может быть, я не могу получить доступ к навигатору в этом классе основного маршрута. Каков правильный способ сделать это?

Ниже мои упрощенные коды

class AwesomeProject extends Component { 

    constructor(props){ 
    super(props); 
    this.state = { 
     loaded: false 
    }; 
    this.checkLoggedInToken(); 
    } 

    renderScene(route, navigator) { 
    if(route.id === "Signup"){ 
     return <Signup navigator={navigator} /> 
    } 

    if(route.id === "Login"){ 
     return <Login navigator={navigator} /> 
    } 
    } 

    render() { 
     return (
     <Navigator 
      style={ styles.container } 
      renderScene={ this.renderScene } 
      initialRoute={{ id : 'Signup' , name : 'SIGNUP' }} /> 
    ); 
    } 

    checkLoggedInToken(){ //Check token online with the stored one that is it legal , not expired 
    this.props.navigator.push({ 
     id: 'Home', 
    }); 
    } 

ответ

0

Я думаю, что вы должны включать в свой дом в renderScene и функцию checkLoggedInToken следует называть в функции componentDidMount.

class AwesomeProject extends Component { 

    constructor(props){ 
    super(props); 
    this.state = { 
     loaded: false 
    }; 
    } 

    componentDidMount() { 
    this.checkLoggedInToken(); 
    } 

    renderScene(route, navigator) { 
    if(route.id === "Signup"){ 
     return <Signup navigator={navigator} /> 
    } 

    if(route.id === "Login"){ 
     return <Login navigator={navigator} /> 
    } 

    if (route.id === "Home") { 
     return <Home navigator={navigator} /> 
    } 
    } 

    render() { 
     return (
     <Navigator 
      ref={(navigator) => this.navigator = navigator} 
      style={ styles.container } 
      renderScene={ this.renderScene } 
      initialRoute={{ id : 'Signup' , name : 'SIGNUP' }} /> 
    ); 
    } 

    checkLoggedInToken(){ //Check token online with the stored one that is it legal , not expired 
    this.navigator.push({ 
     id: 'Home', 
    }); 
    } 
} 
+0

не работает this.navigator и это. props.navigator не определен: S – cjmling

+0

Где вы размещаете console.log? Попробуйте внутри componentDidMount –

+0

был зарегистрирован в checkLoggedInToken, но затем я попытался в componentDidMount, а также .. то же самое undefined – cjmling

0

Я думаю ... для доступа к навигатору в вашей функции checkLoggedInToken(). U должен ссылаться на навигатор, используя ссылки.

уры делают() должно быть, как это ...

render(){ 
    return (
    <Navigator 
     ref={(ref) => this.navigator = ref} 
     style={ styles.container } 
     renderScene={ this.renderScene } 
     initialRoute={{ id : 'Signup' , name : 'SIGNUP' }} /> 
); 
} 

Теперь и может получить доступ к штурману в checkLoggedInToken функции() ..

checkLoggedInToken(){ 
    this.navigator.push({ 
    id: 'Home', 
    }); 
} 
Смежные вопросы