我在 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) {
一旦我必须制作子功能(即一直因为这就是代码的工作方式),我失去了访问使应用程序工作所需的所有资源的能力。
我一直在通过狡猾的解决方法和多余的变量重新创建来解决问题,但现在已经足够了。我需要它像普通语言一样正常工作。那么,我做错了什么?我应该如何创建对象、函数和变量以便我可以实际使用它们?
我怎样才能算出上面的具体例子呢?