【问题标题】:Can I use property name of object as parameter? [closed]我可以使用对象的属性名称作为参数吗? [关闭]
【发布时间】:2019-05-14 20:48:22
【问题描述】:

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

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

【问题讨论】:

  • 什么不适合你,你对社区有什么期望?请描述问题
  • 我有“u001”或“u002”作为我的示例用户 ID。但是我怎样才能传入我的函数呢?
  • 传递给哪个函数?您的查询不清楚。
  • 我有两个函数“addFavorite”和“removeFavorite”来改变特定的用户ID为真或假。为了实现这一点,我需要将用户 id 传递给上面的两个函数,uid:true/false,根据 uid 值可能是“u001”或“u002”,具体取决于哪个用户正在登录。

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


【解决方案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);

【讨论】:

  • 效果很好!非常感谢!
  • 很高兴能为您提供帮助。你可以接受我的回答,见stackoverflow.com/help/someone-answers。感谢并欢迎使用 Stack Overflow。
  • 另外,请参阅我的答案的更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-23
  • 1970-01-01
  • 2018-10-11
相关资源
最近更新 更多