为啥我的堆栈导航器不显示? [复制]

Posted

技术标签:

【中文标题】为啥我的堆栈导航器不显示? [复制]【英文标题】:Why won't my stack navigator show up? [duplicate]为什么我的堆栈导航器不显示? [复制] 【发布时间】:2017-07-26 19:09:40 【问题描述】:

我正在尝试在我的程序中使用StackNavigator。在Login.js 文件中,我尝试使用<Button/> 来实现这一点,但它不起作用。我收到以下错误。为什么会这样?顺便说一句,我正在关注https://facebook.github.io/react-native/docs/navigation.html

这里是index.ios.js

import React,  Component  from 'react';
import  AppRegistry, View from 'react-native';
import  Provider  from 'react-redux';
import Application from './pages/Application';
import store from './redux';
import api from './utilities/api';
import StackNavigator from 'react-navigation';
import Login from './pages/Login';
import About from './pages/About';

const App = StackNavigator(
    Home:  screen: Login ,
    Profile:  screen: About ,
);

export default class DApp extends Component 
    constructor(props) 
        super(props);
        this.state = 
            data: [],
            isLoading: true
        
        console.log("something");
    

    componentWillMount() 
        api.getData().then((res) => 
            this.setState(
                data: res.data
            )
        );
    

    render() 
        if(this.state.isLoading) 
            console.log("The data is: " + this.state.data);
         else 
            console.log("Else got executed");
        

        return (
            <View>
                <Provider store=store>
                    <Application/>
                </Provider>
                <App/>
            </View>
        );
    


AppRegistry.registerComponent('DApp', () => DApp);

这里是Login.js

import React,  Component  from 'react';
import  connect  from 'react-redux';
import  ScrollView, Text, TextInput, View, Button, StyleSheet  from 'react-native';
import  login  from '../redux/actions/auth';
import AuthenticationDetails, CognitoUser, CognitoUserAttribute, CognitoUserPool from '../lib/aws-cognito-identity';
import About from './About';

const awsCognitoSettings = 
    UserPoolId: 'something',
    ClientId: 'something'
;

class Login extends Component 
    constructor(props) 
        super(props);
        this.state = 
            page: 'Login',
            username: '',
            password: ''
        ;
    

    // get alt () 
    //     return (this.state.page === 'Login') ? 'SignUp' : 'Login';
    // 

    get alt() 
        if(this.state.page == 'Login') 
            return 'SignUp';
         else 
            return 'Login';
        
    

    handleClick (e) 
        e.preventDefault();
        const userPool = new CognitoUserPool(awsCognitoSettings);

        // Sign up
        if (this.state.page === 'SignUp') 
            const attributeList = [
                new CognitoUserAttribute( Name: 'email', Value: this.state.username )
            ];
            userPool.signUp(
                this.state.username,
                this.state.password,
                attributeList,
                null,
                (err, result) => 
                    if (err) 
                        alert(err);
                        this.setState( username: '', password: '' );
                        return;
                    
                    console.log(`result = $JSON.stringify(result)`);
                    this.props.onLogin(this.state.username, this.state.password);
                
            );
         else 
            const authDetails = new AuthenticationDetails(
                Username: this.state.username,
                Password: this.state.password
            );
            const cognitoUser = new CognitoUser(
                Username: this.state.username,
                Pool: userPool
            );
            cognitoUser.authenticateUser(authDetails, 
                onSuccess: (result) => 
                    console.log(`access token = $result.getAccessToken().getJwtToken()`);
                    this.props.onLogin(this.state.username, this.state.password);
                ,
                onFailure: (err) => 
                    alert(err);
                    this.setState( username: '', password: '' );
                    return;
                
            );
        
    

    togglePage (e) 
        this.setState( page: this.alt );
        e.preventDefault();
    

    render() 
        const  navigate  = this.props.navigation;
        return(
            <ScrollView style=padding: 20>
                <Text style=fontSize: 27>this.state.page</Text>
                <TextInput
                    placeholder='Email Address'
                    autoCapitalize='none'
                    autoCorrect=false
                    autoFocus=true
                    keyboardType='email-address'
                    value=this.state.username
                    onChangeText=(text) => this.setState( username: text ) />
                <TextInput
                    placeholder='Password'
                    autoCapitalize='none'
                    autoCorrect=false
                    secureTextEntry=true
                    value=this.state.password
                    onChangeText=(text) => this.setState( password: text ) />
                <View style=margin: 7/>
                <Button onPress=(e) => this.handleClick(e) title=this.state.page/>
                <View style=styles.firstView>
                    <Text onPress=(e) => this.togglePage(e) style=styles.buttons>
                        this.alt
                    </Text>
                    <Button
                        title="Go to about"
                        onPress=() =>
                            navigate('About',  name: 'About' )
                        
                    />
                </View>
            </ScrollView>
        );
    


const styles = StyleSheet.create(
    buttons: 
        fontSize: 12,
        color: 'blue',
        flex: 1
    ,

    firstView: 
        margin: 7,
        flexDirection: 'row',
        justifyContent: 'center'
    
);

const mapStateToProps = (state, ownProps) => 
    return 
        isLoggedIn: state.auth.isLoggedIn
    ;


const mapDispatchToProps = (dispatch) => 
    return 
        onLogin: (username, password) =>  dispatch(login(username, password)); 
    


export default connect(mapStateToProps, mapDispatchToProps)(Login);

【问题讨论】:

props.navigation 是什么,你是如何通过它的? 你忘了设置initialRouteName 请不要破坏您的帖子。 【参考方案1】:

您没有正确导入 StackNavigator。 import StackNavigator from ‘react-navigation’;

【讨论】:

谢谢我这样做了。但是现在我在我的模拟器中收到一个不同的错误,上面写着undefined is not an object (evaluating 'this.props.navigation.navigate) 请发布有关错误的详细信息,例如发生在哪里。 Login.js 中,const navigate = this.props.navigation; 是未定义的。 看起来您没有正确设置带有 react-navigation 的登录组件。你能用你拥有的最新代码更新 sn-ps 吗? 您是否也在应用程序组件中呈现登录组件?导航器会为你渲染组件,并用导航道具包装它们来控制导航。

以上是关于为啥我的堆栈导航器不显示? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 UITextView 文本从开始时不显示并隐藏在导航栏下

为啥我的子视图没有显示在堆栈顶部?

iOS:为啥不显示导航栏?

推送导航控制器堆栈后视图不显示

为啥我的 php curl 代码不显示任何内容? [复制]

为啥 android logcat 不显示运行时异常的堆栈跟踪?