Почему магазин редуксов должен быть сериализуемым?

Читая документооборот, я обнаружил, что в документе упоминается это:

Тем не менее, вы должны сделать все возможное, чтобы сохранить состояние сериализации. Не кладите в него ничего, что вы не можете легко превратить в 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?

Любые идеи приветствуются.

Ответы на вопрос(3)

Ваш ответ на вопрос