Undefined не является объектом (оценка this.props.navigator.replace)

Я следовал руководству по использованию React-Navigation, но у меня возникла проблема при попытке перейти на другую страницу. Я получаю эту ошибку: Undefined is not an object (evaluating 'this.props.navigator.replace')

Я искал здесь и на других сайтах, но ничего не помогло мне. Это код, который у меня есть:

индекс:

 import React, { Component } from 'react';
 import { Root } from './config/Router';

 class Application extends Component{
   render(){
     return <Root />;
   }
 }

export default Application;

Маршрутизатор:

import React from 'react';
import { StackNavigator } from 'react-navigation';

import Login from '../pages/Login';
import Home from '../pages/Home';

export const Root = StackNavigator({
  Login:{
    screen: Login,
  },
  Home:{
    screen: Home,
    navigatorOptions:{
      title: "Homepage"
    }
  }
});

Логин (при нажатии кнопки здесь возникает проблема):

  export default class Login extends Component{
  constructor(props){
    super(props);
  }
  _navigate(routeName){
    this.props.navigator.replace({
      name: routeName
    });
  }
  render(){
    return(
       <View style = {styles.container}>
          <TouchableOpacity onPress={this._navigate.bind(this, 'Home')}>
            <Text>
              Hello.
            </Text>
          </TouchableOpacity>
       </View>
    );
  }
}

Что я делаю не так ?

Заранее спасибо.


person John Doah    schedule 15.04.2017    source источник
comment
this.props не определено?   -  person Bobby Matson    schedule 15.04.2017
comment
Как я могу это проверить? извините за глупый вопрос, я новичок в общении с родными и веб-сайтами.   -  person John Doah    schedule 15.04.2017
comment
Вы можете проверить это, запустив console.log(this.props) в первой строке вашего метода рендеринга, а затем проверить трассировку в журнале вашего браузера. Также может помочь узнать, какое руководство вы использовали (для контекста).   -  person Bobby Matson    schedule 15.04.2017


Ответы (2)


Согласно документам React Native, вы хотите перемещаться с помощью this.props.navigation, а не this.props.navigator:

 export default class Login extends Component{
  constructor(props){
    super(props);
  }
  _navigate(routeName){
    this.props.navigation({
      name: routeName
    });
  }
  render(){
    return(
       <View style = {styles.container}>
          <TouchableOpacity onPress={this._navigate.bind(this, 'Home')}>
            <Text>
              Hello.
            </Text>
          </TouchableOpacity>
       </View>
    );
  }
}
person Bobby Matson    schedule 15.04.2017
comment
Спасибо! Отлично работает сейчас. - person John Doah; 15.04.2017
comment
Без проблем! Рад помочь - person Bobby Matson; 15.04.2017
comment
Есть ли способ убить представление после перехода от него? Я попытался добавить замену, но безуспешно. - person John Doah; 15.04.2017
comment
@JohnDoah, вы можете проверить этот тред. - person milkersarac; 17.04.2017

class HomeScreen extends React.Component {
  //Some code here  
}

class ChatScreen extends React.Component {
     //Some code here
}

const SimpleApp = StackNavigator({
    Home: { screen: HomeScreen },
    Chat: { screen: ChatScreen },
});

AppRegistry.registerComponent('HelloWorld', () => SimpleApp);

Вы должны зарегистрировать «Простой», а не «HomeScreen».

person jiadongfeng    schedule 11.08.2017