React Native 和全局可访问的对象

2023-12-06

我在 React Native 上度过了一段非常糟糕的时光,并且能够从更深层次的函数中访问函数、变量和对象。老实说我以为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) {

一旦我必须制作子功能(即一直因为这就是代码的工作方式),我失去了访问使应用程序工作所需的所有资源的能力。

我一直在通过狡猾的解决方法和多余的变量重新创建来解决问题,但现在已经足够了。我需要它像普通语言一样正常工作。那么,我做错了什么?我应该如何创建对象、函数和变量以便我可以实际使用它们?

我怎样才能算出上面的具体例子呢?


根据MDN

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

自从你的函数firebaseRef.once("value").then(function(snapshot)不受约束,因此它失去了上下文this.

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React Native 和全局可访问的对象 的相关文章

随机推荐