小编典典

反应本地和全局可访问对象

reactjs

我在响应本机的过程中度过了非常糟糕的时光,并且能够从更深层次的功能中访问功能,变量和对象。老实说,我认为Redux将是我的救赎之恩,但与此同时,我也遇到了同样的障碍。一个例子:

export class Home extends React.Component {

static propTypes = {
    navigation: PropTypes.object,
    dispatch: Proptypes.func,
};

componentDidMount() {
    Firebase.init();
    firebase.auth().onAuthStateChanged((user) => {
        if (user) {
            this.setState({ loading: false, user });
            firebaseUserID = this.state.user.uid;
            this.props.dispatch(setUserID(firebaseUserID));
            firebaseRef = firebase.database().ref().child("Profiles").child(this.props.userID);
            firebaseRef.once("value").then(function(snapshot) {
                firebaseUserName = snapshot.child("Name").val();
                this.props.dispatch(setUserName(firebaseUserName));
                console.log('Logged in user: ' + this.props.userName);
            });
            this.props.navigation.navigate('Map');
        } else {
            this.props.navigation.navigate('Login');
        }
    });
}

在此示例中,对我的Redux东西的第一个调用非常好:

this.props.dispatch(setUserID(firebaseUserID));

这将获取正确的用户名并将其保存到我的Redux存储中。没问题。

错误是与此行:

this.props.dispatch(setUserName(firebaseUserName));

因为它被称为比上一个语句更深的一级,所以“ this”的上下文是不同的。它是下面子功能的一部分,因此即使上面四行都可以,这里也不存在this.props:

firebaseRef.once("value").then(function(snapshot) {

一旦必须创建子功能(由于代码的工作原理,这是所有时间),我就失去了访问使应用程序正常工作所需的所有资源的能力。我一直在躲避变通方法和多余的变量重用,但现在已经足够了,我需要像正常语言一样正常工作。那么,我在做什么错呢?我应该如何创建对象,函数和变量,以便可以实际使用它们?

也许如果有人可以帮助我解决上面的具体示例,也许那会让我睁开眼睛,对我应该前进的方向有所了解。

谢谢大家,我敢肯定,对于你们中的某些人来说,这是理所当然的,但是对我来说,这是我无法超越的一堵墙。


阅读 172

收藏
2020-07-22

共1个答案

小编典典

根据MDN

箭头函数表达式的语法比函数表达式短,并且没有自己的this, arguments, super, or new.target

由于您的函数firebaseRef.once("value").then(function(snapshot)未绑定,因此失去了的上下文this

因此,最简单的方法是使用 箭头函数 将其绑定为firebaseRef.once("value").then((snapshot) =>

2020-07-22