首页 > 解决方案 > 我可以使用对象的属性名称作为参数吗?

问题描述

我想在我的应用程序中制作最喜欢的模块。我正在使用 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}

那么有没有办法实现呢?或者你们还有其他想法如何完成这个最喜欢的事情吗?

标签: javascriptreactjsfirebasereact-nativegoogle-cloud-firestore

解决方案


以下使用方括号表示法的代码应该可以工作(如果我正确理解您的问题!):

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);

推荐阅读