反应导航错误this.props.navigation.navigat

时间:2019-04-12 10:21:47

标签: react-native react-navigation

我有两个屏幕,我想单击一下以使用反应导航来移动新屏幕。但我遇到了错误

  

this.props.navigation.navigate

这是我的代码。任何人都知道什么是问题。我跟随着每一步。

    import React, {Component} from 'react';
    import { AppRegistry, View, Text,StyleSheet, TextInput, Image, ScrollView, Button, TouchableOpacity} from 'react-native';
    import { createStackNavigator, createAppContainer } from 'react-navigation';

    import SignUp from './SignUp';

    class Login extends  React.Component{

    constructor(props){
        super(props);
        this.state = { text: 'Useless Placeholder' };
    }
        render(){
    const {navigate} = this.props.navigation;
       return(
          <View>
              <ScrollView showsVerticalScrollIndicator={false}>
                <View style={styles.button}>
                         <TouchableOpacity>
                            <Text style={styles.buttonText}>SIGN IN</Text>
                          </TouchableOpacity>
                       </View>
                        <View style={styles.createAccount}>
                             <Text style={styles.createText}
                             onPress={() => this.props.navigation.navigate("Home")}
                             >Create new account</Text>
                        </View>
               </View>
            </ScrollView>
          </View>

       );
    }

}


module.exports = Login;


const MainNavigator = createStackNavigator({
  Home: {screen: SignUp}
});

export default createAppContainer(MainNavigator);

2 个答案:

答案 0 :(得分:1)

您的登录屏幕不是堆栈的一部分。

const MainNavigator = createStackNavigator({
  Home: {screen: SignUp}
});

只需在登录页面的单独的组件上将其添加到堆栈顶部,即可进行导航。

像这样

const MainNavigator = createStackNavigator({
  Login:{screen:Login}
  Home: {screen: SignUp}
});

Login.js

import React, {Component} from 'react';
import { AppRegistry, View, Text,StyleSheet, TextInput, Image, ScrollView, Button, TouchableOpacity} from 'react-native';

    export default class Login extends  React.Component{
    constructor(props){
        super(props);
        this.state = { text: 'Useless Placeholder' };
    }
        render(){
    const {navigate} = this.props.navigation;
       return(
          <View>
              <ScrollView showsVerticalScrollIndicator={false}>
                <View style={styles.button}>
                         <TouchableOpacity>
                            <Text style={styles.buttonText}>SIGN IN</Text>
                          </TouchableOpacity>
                       </View>
                        <View style={styles.createAccount}>
                             <Text style={styles.createText}
                             onPress={() => this.props.navigation.navigate("Home")}
                             >Create new account</Text>
                        </View>
               </View>
            </ScrollView>
          </View>

       );
    }

MainNavigator.js

import React, {Component} from 'react';
    import { AppRegistry, View, Text,StyleSheet, TextInput, Image, ScrollView, Button, TouchableOpacity} from 'react-native';
    import { createStackNavigator, createAppContainer } from 'react-navigation';

import SignUp from './SignUp';
import Login from './Login'


const MainNavigator = createStackNavigator({
  Login: {screen:Login},
  Home: {screen: SignUp}
});

export default createAppContainer(MainNavigator);

答案 1 :(得分:1)

您尚未在堆栈中添加“登录”屏幕 像这样

const MainNavigator = createStackNavigator({
  Login : {screen: Login},
  Home: {screen: SignUp}
});