我在使用 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) {
一旦我必须创建子功能(这是所有时间,因为这是代码的工作方式),我就无法访问使应用程序工作所需的所有资源。我一直在通过狡猾的变通方法和多余的变量重新创建来解决问题,但现在已经足够了,我需要它像普通语言一样正常工作。那么,我做错了什么?我应该如何创建对象、函数和变量以便我可以实际使用它们?
也许如果有人能帮我算出上面的具体例子,也许这会让我大开眼界,我应该如何前进。
谢谢大家,我相信对你们中的一些人来说这是一个明智的选择,但对我来说这是一堵我无法逾越的墙。