【问题标题】:How do you manage adding new attributes on existing objects when using firebase?使用 firebase 时如何管理在现有对象上添加新属性?
【发布时间】:2018-08-07 01:18:28
【问题描述】:

我有一个使用 React + Redux 并结合 Firebase 作为后端的应用程序。

很多时候,我想为现有对象添加一些新属性。 这样做时,现有对象在使用处理这些新属性的新版本应用程序修改之前不会获得该属性。

例如,假设我有一个/categories/ 节点,其中我有这样的对象:

{
   name: "Medical"
}

现在假设我想添加一个默认为 "icon 字段

是否可以一次更新所有类别,以便该字段始终以默认值存在?

或者你在客户端代码中处理这个?

现在我一直在测试这些值以查看它们是否存在,但这似乎不是一个很好的方法。我想在一个地方定义默认值。

似乎为每种对象类型设置类会很有趣,但我不知道如何在 Redux 中进行此操作。

例如,当您获取它们时,您是否只是使用 reducer 将所有 categories 转换为类实例?我担心这会影响性能。

【问题讨论】:

    标签: firebase firebase-realtime-database nosql


    【解决方案1】:

    对 Firebase 数据库的任何写入操作都要求您知道要写入的节点的确切路径。

    没有内置操作可以批量更新具有部分已知路径的节点。

    您可以使您的客户端代码足够健壮以处理缺失的属性,或者您确实可以运行迁移脚本将新属性添加到每个相关节点。但是由于该脚本必须知道要写入的每个节点的确切路径,因此它可能首先必须读取/查询数据库以确定这些路径。根据要更新的项目数量,它可能会在一次调用中使用多位置更新来更新多个节点。例如

    firebase.database().ref("categories").update({
      "idOfMedicalCategory/icon": "newIconForMedical",
      "idOfCommercialCategory/icon": "newIconForCommercial"
      "idOfTechCategory/icon": "newIconForTech"
    
    })
    

    【讨论】:

    • 我更倾向于健壮的代码方法。我觉得处理这个问题的一个好方法是为每个实体设置类,这将是单点故障。您可以在构造函数中初始化事物,也可以在一个可以在任何地方重用的地方添加函数/相关逻辑。但我仍然担心这种解决方案的性能成本。提取时,reducer 必须为每个实体创建新的类实例。对此有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 2012-11-11
    • 2013-01-23
    • 2018-03-18
    • 1970-01-01
    相关资源
    最近更新 更多