未定义的“this.props.navigation.state.props.p”导航反应原生

Posted

技术标签:

【中文标题】未定义的“this.props.navigation.state.props.p”导航反应原生【英文标题】:Undefined ' this.props.navigation.state.props.p' navigation react-native 【发布时间】:2018-11-11 07:58:39 【问题描述】:

我已阅读有关此问题的所有其他主题,但没有人能解决我的问题。

我不知道为什么,但是当我尝试导航时,我无法将 props 传递给 react-navigation,我总是得到这个错误:

“未定义'this.props.navigation.state.props.p'”

这是我的代码:

import React from 'react'
import View, Text, ActivityIndicator, StyleSheet from 'react-native'
import * as firebase from 'firebase';

const config = 
    apiKey: "AIzaSyBeFuR40n7vp1XU9edL8PeOFq3UafKQ314",
    authDomain: "anylibrary-961e1.firebaseapp.com",
    databaseURL: "https://anylibrary-961e1.firebaseio.com",
    projectId: "anylibrary-961e1",
    storageBucket: "anylibrary-961e1.appspot.com",
    messagingSenderId: "482573837189"
;

export default class Loading extends React.Component 
    static navigationOptions = 
        header: null,
    ;


    constructor(props) 
        super(props);
    


    componentWillMount() 
        if (!firebase.apps.length) 
            firebase.initializeApp(config);
        
    

    componentDidMount() 
        firebase.auth().onAuthStateChanged(user => 
            const navigate = this.props.navigation;
            if (user) 
                navigate('UserArea', p: 'Profile');
             else 
                navigate('MainPage');
            
        )
    

    render() 
        return (
            <View style=styles.container>
                <Text>Loading...</Text>
                <ActivityIndicator size="large"/>
            </View>
        );
    

const styles = StyleSheet.create(
    container: 
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
    
)

还有:

import React from 'react';
import StyleSheet, View, Alert from 'react-native';
import Profile from './Profile';
import Notifications from './Notifications';
import Search from './Search';
import Home from './Home';
import Tabbar from 'react-native-tabbar-bottom'
import * as firebase from 'firebase';

const config = 
    apiKey: "AIzaSyBeFuR40n7vp1XU9edL8PeOFq3UafKQ314",
    authDomain: "anylibrary-961e1.firebaseapp.com",
    databaseURL: "https://anylibrary-961e1.firebaseio.com",
    projectId: "anylibrary-961e1",
    storageBucket: "anylibrary-961e1.appspot.com",
    messagingSenderId: "482573837189"
;


export default class UserArea extends React.Component 
    static navigationOptions = 
        header: null,
    

    constructor(props) 
        super(props);
        this.state = 
            page: this.props.navigation.state.props.p,
            name: '',
        
    

    componentWillMount()
        if (!firebase.apps.length) 
            firebase.initializeApp(config);
        
    

    componentDidMount() 
        firebase.auth().onAuthStateChanged(user => 
             this.state.name = user.displayName;
        )
    

    render() 

        return (
            <View style=styles.container>
                this.state.page === "Home" && <Home navigation=this.props.navigation>Home</Home>
                this.state.page === "Profile" && <Profile navigation=this.props.navigation>Profile</Profile>
                this.state.page === "Notifications" &&   <Notifications navigation=this.props.navigation>Notifications</Notifications>
                this.state.page === "Search" && <Search navigation=this.props.navigation>Search</Search>

                <Tabbar
                    stateFunc=(tab) => 
                        this.setState(page: tab.page)
                        //this.props.navigation.setParams(tabTitle: tab.title)
                    
                    activePage=this.state.page
                    tabbarBgColor='#00619A'
                    iconColor='#99c2ff'
                    tabs=[
                        
                            page: "Home",
                            icon: "home",
                            iconText: "Home"
                        ,
                        
                            page: "Profile",
                            icon: "person",
                            iconText: "Profile"
                        ,
                        
                            page: "Notifications",
                            icon: "notifications",
                            badgeNumber: 0,
                            iconText: "Notifications"
                        ,
                        
                            page: "Search",
                            icon: "search",
                            iconText: "Search"
                        ,
                    ]
                />
            </View>
        );
    


const styles = StyleSheet.create(
    container: 
        flex: 1
    
);

基本上我是这样发送的:

navigate('UserArea', p: 'Profile');

并尝试像这样访问它:

page: this.props.navigation.state.props.p,

有人吗?

问题出在哪里?

我做错了什么?

【问题讨论】:

可能你的链中的某个元素为空 一切正常,似乎没有什么是空的。如果我不想传递道具,我直接输入“页面:'个人资料'”,一切正常...... 您是否尝试从构造函数中删除 this? page: props.navigation.state.props.p, 【参考方案1】:

从文档来看,这似乎是获取路由参数的正确方法

this.props.navigation.state.params.p

https://reactnavigation.org/docs/en/navigation-prop.html

【讨论】:

“p”是保留字吗?要么?我将其更改为“mypage”,现在可以正常工作了...但我仍然不明白为什么它以前不起作用... 这不是保留字,可能你的代码中还有其他错误:)【参考方案2】:

旧方法是

this.props.navigation.state.params

新方法是

this.props.route.params

我使用 rn 版本 0.62, 反应导航版-5

【讨论】:

【参考方案3】:

试试这个:

 page: this.props.navigation.state.p

我建议您使用 getParam - 使用 fallback

获取特定的参数值
const name = this.props.navigation.getParam('name', 'Peter');

如果 name 或 param 未定义,则将 fallback 设置为 Peter。

【讨论】:

我尝试了所有可能的方法来获取参数,从文档和其他关于这个错误的话题。就像我上面说的,通过更改道具的名称来解决,没有意义,但工作正常谢谢大家!【参考方案4】:

如果使用 react-navigation v5,请使用

const data = route.params?.someParam ?? 'defaultValue';

【讨论】:

以上是关于未定义的“this.props.navigation.state.props.p”导航反应原生的主要内容,如果未能解决你的问题,请参考以下文章

“注意:未定义的变量”、“注意:未定义的索引”、“警告:未定义的数组键”和“注意:未定义的偏移量”使用 PHP

idea thymeleaf 变量未定义

“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用 PHP

“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用 PHP

“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用 PHP

“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用 PHP