Функция вызова в const javascript реагирует на нативный - PullRequest
0 голосов
/ 27 сентября 2018

Я новичок, чтобы реагировать на нативный и JavaScript.Я пришел из Java и Android Dev.Я пытаюсь вызвать функцию в const, но я получаю массу ошибок, независимо от того, как я ее пробую.

Я получаю сообщение об ошибке:

this.collectionUpdate is not a function

MainScreen:

 onCollectionUpdate = (doc) => {
    const items = [];

    doc.forEach((doc)=> {
        console.log("doc received");
        const {Name, imageDownloadUrl,Location} = doc.data();

        items.push({
            key: doc.id,
            doc, //DocumentSnapshot
            Name,
            imageDownloadUrl,
            Location,

        });
    });

    this.setState({
        items,
        loading: false,
    });
}




componentDidMount() {

    const geoQuery = geoFirestore.query({
        center: new firebase.firestore.GeoPoint(10.38, 2.41),
        radius: 10.5
    });

    const onReadyRegistration = geoQuery.on('ready', () => {
        console.log('GeoFirestoreQuery has loaded and fired all other events for initial data');
    });


    const onKeyEnteredRegistration = geoQuery.on('key_entered', function(key, doc, distance) {
        console.log(key + ' entered query at ' + doc.coordinates.latitude
            + ',' + doc.Name
            + ',' + doc.coordinates.longitude
            + ' (' + distance + ' km from center)')

        this.onCollectionUpdate(doc)



    });

    this.onCollectionUpdate = this.onCollectionUpdate.bind(this);
}

Я знаю, что это, вероятно, не работает для меня, так как я не знаю достаточно в javascript, чтобы понять, что я делаю неправильно, но я начну делать курсыв Javascript скоро, чтобы получить лучшее понимание.Но я был бы очень благодарен за любого, кто мог бы показать мне, где я иду не так.Я чувствую, что это потому, что я пытаюсь вызвать функцию внутри const?

1 Ответ

0 голосов
/ 27 сентября 2018

Дело не в const, а в function.Функции, написанные с ключевым словом function, создают новую область видимости для this.Когда вы используете this внутри function, вы смотрите на this, отличное от того, что находится за его пределами.

geoQuery.on('key_entered', function(key, doc, distance) {
    this.onCollectionUpdate(doc) // wrong "this"
})

Один простой способ решить эту проблему - просто использовать => функция здесь:

geoQuery.on('key_entered', (key, doc, distance) => {
    this.onCollectionUpdate(doc) // correct "this"
})
...