Redux store - 数据库 - 如何传播变化
Redux store - Database - how to propagate changes
在我的 angular4 应用程序中,我有 2 个列表:
"list of my friends" 和 "list of xys friends"
我将这两个列表都添加到了商店中,因为我将它们显示在不同的组件中,并且我希望所有不同的组件能够立即实现列表上的更改。
如果一个朋友现在改变它 "name" 我有一个问题,我必须在 2 点更新商店。在 "list of my friends" 和 "list of xys friends" 中。这感觉是错误的,令人困惑的,而且很难跟踪。
另一种方法是先更新数据库中的"name",然后重新请求"list of my friends" 和"list of xys friends" 的新版本。
但这需要很多时间,尤其是当我有更多列表时。
那么专业的做法是什么?非常感谢!
这就是为什么建议保持数据存储(尤其是 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.
在我的 angular4 应用程序中,我有 2 个列表: "list of my friends" 和 "list of xys friends"
我将这两个列表都添加到了商店中,因为我将它们显示在不同的组件中,并且我希望所有不同的组件能够立即实现列表上的更改。
如果一个朋友现在改变它 "name" 我有一个问题,我必须在 2 点更新商店。在 "list of my friends" 和 "list of xys friends" 中。这感觉是错误的,令人困惑的,而且很难跟踪。
另一种方法是先更新数据库中的"name",然后重新请求"list of my friends" 和"list of xys friends" 的新版本。
但这需要很多时间,尤其是当我有更多列表时。
那么专业的做法是什么?非常感谢!
这就是为什么建议保持数据存储(尤其是 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.