我在响应本机的过程中度过了非常糟糕的时光,并且能够从更深层次的功能中访问功能,变量和对象。老实说,我认为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。
this, arguments, super, or new.target
由于您的函数firebaseRef.once("value").then(function(snapshot)未绑定,因此失去了的上下文this。
firebaseRef.once("value").then(function(snapshot)
this
因此,最简单的方法是使用 箭头函数 将其绑定为firebaseRef.once("value").then((snapshot) =>
firebaseRef.once("value").then((snapshot) =>