реагировать на нативные и глобально доступные объекты - PullRequest
0 голосов
/ 07 мая 2018

У меня действительно ужасное время, когда я работаю с 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) {

Как только мне придется создавать подфункции (что ВСЕ ВРЕМЯ, потому что так работает код), я теряю возможность доступа ко всем ресурсам, необходимым для работы приложения. Я пробирался через хитроумные обходные пути и излишнее воссоздание переменных, но теперь достаточно достаточно, мне нужно, чтобы это работало правильно, как нормальный язык. Итак, что я делаю не так? Как я должен создавать объекты, функции и переменные, чтобы я мог их использовать?

Возможно, если кто-то поможет мне разобраться с приведенным выше конкретным примером, возможно, это откроет мне глаза на то, как я должен идти вперед.

Спасибо всем, я уверен, что для некоторых из вас это не просто, но для меня это стена, через которую я не могу пройти.

1 Ответ

0 голосов
/ 07 мая 2018

Согласно MDN

Выражение функции со стрелкой имеет более короткий синтаксис, чем выражение функции, и не имеет собственного this, arguments, super, or new.target.

Поскольку ваша функция firebaseRef.once("value").then(function(snapshot) не связана, следовательно, она теряет контекст this.

Поэтому самым простым способом было бы использовать функцию стрелки , чтобы связать ее как firebaseRef.once("value").then((snapshot) =>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...