开发者问题收集

React-Navigation:Navigation onPress 不起作用

2019-01-04
1773

我对这个导航系统有点困惑。我有根目录,其中包含导航。我有两个不同的屏幕。到这里都没问题。我放了 initialRoute 并显示 SignInScreen。还放了一个用于注册屏幕的按钮,但该按钮不起作用。

Root.js

const ScreenNavigator = createStackNavigator({
    SignIn: SignInScreen,
    SignUp: SignUpScreen,
},
    {initialRouteName: 'SignIn' }
);

const ScreenContainer = createAppContainer(ScreenNavigator);

export default class Root extends Component{
    render(){
        return(
            <ScreenContainer style={styles.container} />
        );
    }
}

和 SignInScreen:

import SignUpScreen from '../screens/Signup';

export default class SignInScreen extends Component{
    constructor(props){
        super(props);
    }

    render(){
        return(
            <View style={styles.container}>
                <Text>Sign in Screen </Text>
                <Button
                    title={'Sign up'}
                    onPress={() => this.props.navigation.navigate('SignUpScreen')}
                />
            </View>
        );
    }
}

这是我在这里遗漏的东西吗?谢谢您的帮助。

2个回答

代码没有错误,你只是拼写错了路线。 没有路由名称 SignUpScreen,正确的路由名称是 SignUpSignIn

混淆是由于 React Navigation 的 api 发生变化造成的

在我们定义像

Login: { 
  screen: LoginScreen
}

这样的路由之前,login 是一个路由名称,而 screen 只是我们需要渲染的一个组件

但是在 2^ 版本之后,它更改为

{SignIn: SignInScreen} 

所以现在名称是 SignIn 而组件是 SignInScreen

即使您想要一个路由名称作为组件,只需执行

const ScreenNavigator = createStackNavigator({
    SignInScreen,
    SignUpScreen,
},

现在您的路由名称是 SignInScreenSignUpScreen

希望这些信息足够

Jigar
2019-01-04

路线名称问题。

onPress = {() => this.props.navigation.navigate('SignUp')}

尝试将路线名称保留在常量文件中。这可能会使事情更容易处理。

const routes = {
  route1: 'route1',
  route2: 'route2',
};

const ScreenNavigator = createStackNavigator({
    [routes.route1]: Screen1,
    [routes.route2]: Screen2,
},
    {initialRouteName: routes.route1 }
);
Naveen Vignesh
2019-01-04