我可以使用对象的属性名称作为参数吗?

时间:2018-12-13 15:32:08

标签: javascript reactjs firebase react-native google-cloud-firestore

我想在我的应用程序中创建“收藏夹”模块。我正在使用React-native和Firestore。这是我的代码:

addFavorite() {
    getPlaceName().doc(this.selectedPlaceName.id).set({
        favorite: {
           uid : true
        }
    }, { merge: true }).then(() => {
        console.log('Added')
    }).catch((e) => {
        console.log('error', e)
    })
}
removeFavorite() {
    getPlaceName().doc(this.selectedPlaceName.id).set({
        favorite: {
            uid: false
        }
    }, { merge: true }).then(() => {
        console.log('Removed')
    }).catch((e) => {
        console.log('error', e)
    })
}

我将收藏夹作为地图存储在Firestore中:

favorite: {
    u001: true,
    u002: false}

那么有什么方法可以实现?还是你们还有其他想法如何完成最喜欢的事情?

1 个答案:

答案 0 :(得分:1)

使用square brackets notation的以下代码应该可以正常工作(如果我正确理解了您的问题!):

addFavorite(uid) {
    const favoriteObj = {}
    favoriteObj[uid]  = true;
    getPlaceName().doc(this.selectedPlaceName.id).set({
        favorite: favoriteObj
    }, { merge: true }).then(() => {
        console.log('Added')
    }).catch((e) => {
        console.log('error', e)
    })
}
removeFavorite(uid) {
    const favoriteObj = {}
    favoriteObj[uid]  = false;
    getPlaceName().doc(this.selectedPlaceName.id).set({
        favorite: favoriteObj
    }, { merge: true }).then(() => {
        console.log('Removed')
    }).catch((e) => {
        console.log('error', e)
    })
}

更新: 由于两个函数之间有很多代码是通用的,因此请注意,您可以在一个函数中重构代码,例如:

setFavorite(uid, isFavorite) {
    const favoriteObj = {}
    favoriteObj[uid]  = isFavorite;
    getPlaceName().doc(this.selectedPlaceName.id).set({
        favorite: favoriteObj
    }, { merge: true }).then(() => {
        if (isFavorite) {
           console.log('Added')
        } else {
           console.log('Removed')
        }
    }).catch((e) => {
        console.log('error', e)
    })
}

其中isFavorite是布尔值。您可以这样称呼它,例如:

setFavorite("u001", true);

setFavorite("u002", false);
相关问题