【问题标题】:Redux store - Database - how to propagate changesRedux 存储 - 数据库 - 如何传播更改
【发布时间】:2017-08-22 13:25:59
【问题描述】:

在我的 angular4 应用程序中,我有 2 个列表: “我的朋友列表”和“xys 朋友列表”

我将这两个列表都添加到了商店,因为我将它们显示在不同的组件中,并且我希望所有不同的组件都能立即在我的列表中实现更改。

如果一位朋友现在更改了它的“名称”,我会遇到我必须在 2 点更新商店的问题。在“我的朋友列表”和“xys 朋友列表”中。这感觉是错误的、令人困惑的并且难以跟踪。

另一种方法是先更新数据库中的“姓名”,然后重新请求“我的朋友列表”和“xys 朋友列表”的新版本。

但这需要很多时间,尤其是当我有更多列表时。

那么专业的方法是什么?非常感谢!

【问题讨论】:

    标签: redux store propagation


    【解决方案1】:

    这就是为什么建议您保持数据存储(尤其是 Redux 存储)平坦的确切原因。通常,嵌套的数量应该最少,并且实体应该通过它们的 id 相互引用。

    最好用一个例子来解释。目前,您的数据可能如下所示:

    {
        allUsers: [
            {
                id: 1,
                name: 'Foo',
                friends: [
                    {
                        id: 2,
                        name: 'Bar',
                    },
                    {
                        id: 3,
                        name: 'Baz'
                    }
                ]
            },
            {
                id: 2,
                name: 'Bar',
                friends: [
                    {
                        id: 3,
                        name: 'Baz'
                    }
                ]
            },
            {
                id: 3,
                name: 'Baz',
                friends: []
            }
        ]
    }
    

    如您所见,有很多嵌套和重复。如果任何用户更改了他们的名字,那么在整个商店中传播这种更改将很困难,尤其是在更复杂的情况下。但是,如果我们将这个结构扁平化,它会变得更好:

    {
        users: {
            1: {
                id: 1,
                name: 'Foo',
                friends: [2, 3]
            },
            2: {
                id: 2,
                name: 'Bar',
                friends: [3]
            },
            3: {
                id: 3,
                name: 'Baz',
                frineds: []
            }
        },
    
        allUsers: [1, 2, 3]
    }
    

    每个实体都存储在一个特定的位置。其他实体不能包含它的数据,只能通过id引用,所以不需要同步变化。这种方法可以避免很多数据完整性问题(包括您的问题),并最大限度地减少应用程序的内存占用。

    对于查询这样的存储,您可以编写函数,将这些数据转换为更便于阅读的形状,并假设它们的结果是只读的。在 Redux 中,此类函数通常称为 selectors

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-23
      • 1970-01-01
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      • 2019-05-14
      • 2011-07-22
      • 2020-05-20
      相关资源
      最近更新 更多