const javascript中的Call Function响应本机

时间:2018-09-27 17:27:46

标签: javascript reactjs firebase react-native geofire

我是新来的响应本机和JavaScript的人。我来自java和android dev。 我希望在const中调用一个函数,但是无论尝试哪种方式,我都会遇到很多错误。

我遇到了错误:

this.collectionUpdate is not a function

主屏幕:

 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 :(得分:4)

这与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"
})