我有一个非常糟糕的时间反应原生,并能够从更深层次的功能中访问功能,变量和对象。老实说,我认为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.props不存在于这里,即使它上面的四行很好:
firebaseRef.once("value").then(function(snapshot) {
一旦我必须创建子功能(因为这是代码的工作方式,所有时间都是这样),我将失去访问使应用程序工作所需的所有资源的能力。我一直在通过狡猾的解决方案和多余的变量重复进行攻击,但现在已经足够了,我需要像普通语言一样正常工作。那么,我做错了什么?我该如何创建对象,函数和变量,以便我可以实际使用它们?
也许如果有人可以帮我解决上面的具体例子,也许这会让我看到我应该如何前进。
谢谢大家,我相信对你们中的一些人来说这是一个明智的选择,但对我来说,这是一块我无法走过的墙。
答案 0 :(得分:2)
根据MDN
箭头函数表达式的语法短于函数表达式,并且没有自己的
this, arguments, super, or new.target
。
由于您的函数firebaseRef.once("value").then(function(snapshot)
未受约束,因此它正在丢失this
的上下文。
因此,最简单的方法是使用箭头功能将其绑定为firebaseRef.once("value").then((snapshot) =>