Почему магазин редуксов должен быть сериализуемым?
Читая документооборот, я обнаружил, что в документе упоминается это:
Тем не менее, вы должны сделать все возможное, чтобы сохранить состояние сериализации. Не кладите в него ничего, что вы не можете легко превратить в JSON.
Итак, мой вопрос, в чем выгода сохранения сериализуемого состояния? Или какие трудности могут возникнуть, если я помещу несериализуемые данные в хранилище?
И я считаю, что это не уникально для редукса - Flux, даже местный штат React, предлагает то же самое.
Чтобы пояснить мне, вот пример. Предположим, что структура магазина такая.
{
books: {
1: { id: 1, name: "Book 1", author_id: 4 }
},
authors: {
4: { id: 4, name: "Author 4" }
}
}
Это все должно выглядеть хорошо. Однако, когда я пытаюсь получить доступ к «автору Книги 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?
Любые идеи приветствуются.