Реакция: установка состояния на карту es6 - PullRequest
0 голосов
/ 04 декабря 2018

Это более общий вопрос о передовых практиках.

Я играл здесь и там с JavaScript-картами и пытался найти больше информации о том, считается ли это анти-или нет.запах шаблона / кода для установки свойств состояния на карту.Ссылка ниже представляет собой тему проблемы в репозитории Redux с некоторыми комментариями, такими как:

«Вы можете использовать Карты и Наборы в качестве значений состояния, но это не рекомендуется из-за проблем с сериализуемостью.»

Однако эта тема о Redux.Как насчет ванильного React?У кого-нибудь есть сильные мнения или понимание?Извините, если этот вопрос не в том месте.

https://github.com/reduxjs/redux/issues/1499

1 Ответ

0 голосов
/ 04 декабря 2018

Состояние React должно быть неизменным, поскольку React использует поверхностное сравнение для проверки на равенство.При сравнении скалярных значений (чисел, строк) сравниваются их значения.При сравнении объектов он не сравнивает их атрибуты - сравниваются только их ссылки (например, «они указывают на один и тот же объект?).

Карты ES6 не являются неизменяемыми и оптимизированы для изменяемостивот почему не рекомендуется использовать их в React как есть. React не будет знать, обновлена ​​карта или нет.

var map1 = new Map();
var map2 = map1.set('b', 2); // mutate map
map1 === map2; // true because reference remain unchanged after mutation

Вы можете использовать Карты, если хотите, но вам нужно использовать некоторый помощник по неизменяемости, напримерImmutable.js. В следующем примере используется неизменяемая карта

const { Map } = require('immutable');
const map1 = Map({ a: 1, b: 2, c: 3 });
const map2 = map1.set('b', 2); // Set to same value
map1 === map2; // true
const map3 = map1.set('b', 4); // Set to different value
map1 === map3; // false

Ссылки:

https://github.com/reduxjs/redux/issues/1499#issuecomment-194002599 https://stackoverflow.com/a/36084891/2073920

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