【发布时间】:2017-04-17 21:18:31
【问题描述】:
阅读 redux 文档时,我发现:
不过,您应该尽最大努力保持状态可序列化。 不要在里面放任何你不能轻易转换成 JSON 的东西。
所以我的问题是,保持状态可序列化有什么好处? 或者,如果我将不可序列化的数据放入存储中,我可能会遇到什么困难?
而且我相信这不是 redux 独有的 - Flux,甚至 React 本地状态也暗示了同样的事情。
为了让我清楚,这里是一个例子。假设商店结构是这样的。
{
books: {
1: { id: 1, name: "Book 1", author_id: 4 }
},
authors: {
4: { id: 4, name: "Author 4" }
}
}
这一切看起来都不错。但是,当我尝试访问“Book 1 的作者”时,我必须编写如下代码:
let book = store.getState().books[book_id];
let author = store.getState().authors[book.author_id];
现在,我要定义一个类:
class Book {
getAuthor() {
return store.getState().authors[this.author_id];
}
}
我的商店将是:
{
books: {
1: Book(id=1, name="Book 1")
},
...
}
这样我可以很容易地通过使用获得作者:
let author = store.getState().books[book_id].getAuthor();
第二种方法可以使“书”对象知道如何检索作者数据,因此调用者不需要知道书籍和作者之间的关系。那么,为什么我们不使用它,而不是像方法 1 一样将“普通对象”保留在存储中?
感谢任何想法。
【问题讨论】:
-
在 JS 中,您可以进行通用调用/应用调用,因此此类定义不需要存在于数据中,并且无论如何都应该分离数据和逻辑。如果您想要方便的有条不紊的好东西,请创建另一个抽象层。
标签: javascript reactjs redux flux