自从我开始阅读 SPA 以来,最让我困惑的是如何处理应用程序状态。
尽管我在 Redux 中找到了我一直在寻找的大部分答案,但仍有几件事我不确定如何处理。
其中一件事是如何指定我想在我的应用程序中使用的“实体”的形状。在我过去使用过的其他框架中,我看到大量使用 ES2015 类来实现此目的,但在 React/Redux 应用程序中,对象字面量是迄今为止表达应用程序状态的首选方式。昨晚我在 redux 文档中阅读了有关规范化数据的内容,虽然它给了我关于如何处理深度嵌套对象的好主意,但它让我觉得缺少一些东西,那就是如何在一个单一的尽可能清楚地发现应用程序状态的结构/形状是什么。
以上述文章中使用的样本数据为例:
{
posts : {
byId : {
"post1" : {
id : "post1",
author : "user1",
body : "......",
comments : ["comment1", "comment2"]
},
"post2" : {
id : "post2",
author : "user2",
body : "......",
comments : ["comment3", "comment4", "comment5"]
}
}
allIds : ["post1", "post2"]
},
comments : {
byId : {
"comment1" : {
id : "comment1",
author : "user2",
comment : ".....",
},
"comment2" : {
id : "comment2",
author : "user3",
comment : ".....",
},
"comment3" : {
id : "comment3",
author : "user3",
comment : ".....",
},
"comment4" : {
id : "comment4",
author : "user1",
comment : ".....",
},
"comment5" : {
id : "comment5",
author : "user3",
comment : ".....",
},
},
allIds : ["comment1", "comment2", "comment3", "commment4", "comment5"]
},
users : {
byId : {
"user1" : {
username : "user1",
name : "User 1",
}
"user2" : {
username : "user2",
name : "User 2",
}
"user3" : {
username : "user3",
name : "User 3",
}
},
allIds : ["user1", "user2", "user3"]
}
}
你会如何表达这些数据的形状?像这样?
{
posts : {
},
comments : {
},
users : {
}
}
也许:
{
posts : {
byId : {
}
allIds : []
},
comments : {
byId : {
}
allIds : []
},
users : {
byId : {
}
allIds : []
}
}
好吧,这并没有告诉我每个对象内部的对象的实际形状,byId
而这正是自从我开始研究一点 Redux 以来一直困扰我的问题。
所以问题是,有没有什么方法/惯例可以让我以最清晰的方式表达形状,特别是构成商店将要管理的状态的对象的每个属性?