У меня действительно ужасное время, когда я работаю с 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.props здесь не существует, хотя буквально на четыре строки выше это нормально:
firebaseRef.once("value").then(function(snapshot) {
Как только мне придется создавать подфункции (что ВСЕ ВРЕМЯ, потому что так работает код), я теряю возможность доступа ко всем ресурсам, необходимым для работы приложения. Я пробирался через хитроумные обходные пути и излишнее воссоздание переменных, но теперь достаточно достаточно, мне нужно, чтобы это работало правильно, как нормальный язык. Итак, что я делаю не так? Как я должен создавать объекты, функции и переменные, чтобы я мог их использовать?
Возможно, если кто-то поможет мне разобраться с приведенным выше конкретным примером, возможно, это откроет мне глаза на то, как я должен идти вперед.
Спасибо всем, я уверен, что для некоторых из вас это не просто, но для меня это стена, через которую я не могу пройти.