redux и immutable.js: перевод несериализуемых объектов в состояние - PullRequest
0 голосов
/ 23 января 2019

Официальная страница с избыточностью настоятельно рекомендует, чтобы только сериализуемые объекты были помещены в дерево состояний:

Настоятельно рекомендуется размещать только простые сериализуемые объекты, массивы и примитивы в ваш магазин. Технически возможно вставьте несерийные предметы в магазин, но это может привести к поломке способность сохранять и увлажнять содержимое магазина, а также как мешать отладке путешествий во времени.

Однако на той же странице, несколько разделов спустя, есть раздел об использовании immutable.js :

Библиотеки, ориентированные на неизменяемость, такие как Immutable.JS, предназначены для преодолеть проблемы с неизменяемостью, свойственные JavaScript, обеспечивая все преимущества неизменности с производительностью вашего приложение требует.

Разве эти две идеи не противоречат друг другу?

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Отладка путешествий во времени (или Redux devtools) поддерживает Immutable.js.Это сериализуемо.

0 голосов
/ 23 января 2019

Нет, это не так.

Экземпляры ImmutableJ являются сериализуемыми.Например, использование transit-immutable.

Только потому, что экземпляры ImmutableJs не являются простыми объектами javascript, это не означает, что они не сериализуемы.Кроме того, простое использование простых объектов javascript не гарантирует полную сериализацию состояния вашего магазина.Например, представьте, что редуктор делает что-то вроде этого:

const sillyReducer = (state, action) => {
  if (action.type !== 'DO_SOMETHING_SILLY') return state;
  const a = {};
  const b = {next: a};
  a.next = b;
  return a;
}

Циклические зависимости довольно сложно сериализовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...