Оригинал -Immutable.js пугает, вот как начать.
Вы знаете из многих источников, что вы должны использоватьImmutable. Вы тоже хотите его использовать, но не знаете, зачем. И когда вы идете к официальномуДокументация, первый фрагмент кода, который бросается в глаза:
identity<T>(value: T): T
Вы думаете: э... давай забудем.
Это простое и краткое руководство, которое поможет вам начать работуImmutable
Статья точно не подведет.
год назад, вPilcro, я рекомендовал команде разработчиковImmutable
. Это оказалось самым мудрым решением на данный момент. Наши приложения стали более читабельными, более надежными, менее глючными и более предсказуемыми.
Основание
стандартныйjs
Преобразование формата данных вImmutable
существуетjs
, мы знаем о двух распространенных типах данных:Object{}
а такжеArray[]
.Immutable
Идея:
-
Object
{}
сталиMapMap({})
-
Array
[]
сталиListList([])
Чтобы быть более конкретным, используйтеImmutable
который предоставилMap
,List
а такжеfromJS
функция:
import { Map, List, fromJS } from 'immutable';
// 原生 js 数据类型
const person = {
name: 'Will',
pets: ['cat', 'dog']
};
// 等同于 Immutable 中的:
const immutablePerson = Map({
name: 'Will',
pets: List(['cat', 'dog'])
});
// 或者 ...
const immutablePerson = fromJS(person);
formJS
очень полезная функция, которая преобразует вложенные структуры данных вImmutable
объект. Создается самостоятельно на основе данных в процессе конвертацииMaps
а такжеLists
.
Immutable
Преобразовать в стандартjs
Формат данных
получить отImmutable
Получите ваши критерии от объектаjs
формат данных, вам просто нужно позвонитьImmutable
объектtoJS
Функция может быть:
import { Map } from 'immutable';
const immutablePerson = Map({ name: 'Will' });
const person = immutablePerson.toJS();
console.log(person); // 打印 { name: 'Will' };
Структуры данных следует считать нативными
js
структура данных илиImmutable
объект
начать использоватьImmutable
объясняя почемуImmutable
Прежде чем это будет полезно, позвольте мне дать вам три фрагмента кода, чтобы рассказать вамImmutable
Как вам помочь.
Получить несуществующее значение данных из вложенной структуры данных
Во-первых, роднойjs
:
const data = { my: { nested: { name: 'Will' } } };
const goodName = data.my.nested.name;
console.log(goodName); // 打印 Will
const badName = data.my.lovely.name;
// throws error: 'Cannot read name of undefined'
// 'lovely' 属性不存在,所以报错
посмотри сноваImmutable
:
const data = fromJS({ my: { nested: { name: 'Will' } } });
const goodName = data.getIn(['my', 'nested', 'name']);
console.log(goodName); // 打印 Will
const badName = data.getIn(['my', 'lovely', 'name']);
console.log(badName); // 打印 undefined - 不会抛出异常
В приведенном выше примере роднойjs
Код выдает исключение, ноImmutable
Нет.
Это потому, что мы используемgetIn()
функция для получения вложенных значений данных. Ключевой путь для значения данных не существует (другими словами, объект не является вложенной структурой, которую вы ожидаете), он просто возвращаетundefined
и никаких исключений не будет.
Вам не нужно вкладываться так, чтобы проверить, существует ли значение данных:
if (data && data.my && data.my.nested && data.my.nested.name) { ...
Эта простая функция делает ваш код более читабельным, лаконичным и надежным.
цепная операция
Во-первых, роднойjs
:
const pets = ['cat', 'dog'];
pets.push('goldfish');
pets.push('tortoise');
console.log(pets); // 打印 ['cat', 'dog', 'goldfish', 'tortoise'];
посмотри сноваImmutable
:
const pets = List(['cat', 'dog']);
const finalPets = pets.push('goldfish').push('tortoise');
console.log(pets.toJS()); // 打印 ['cat', 'dog'];
console.log(finalPets.toJS()); // 打印 ['cat', 'dog', 'goldfish', 'tortoise'];
потому чтоList.push
Возвращает результат после операции, мы можем продолжить позже链式
операции, в то время как собственный массивpush
Функция возвращает длину нового массива после операции.
Это очень простой пример цепочки операций, но он иллюстрируетImmutable
мощные функции.
Это позволяет выполнять различные манипуляции с данными функциональным и лаконичным образом.
Immutable
Операции над объектами всегда возвращают результат операции
неизменяемые данные
Это называется不可变
, поэтому нам нужно обсудить, почему это важно.
Например, вы используетеImmutable
Объект создается и обновляется, но его исходная структура данных остается прежней. Это不可变
.
const data = fromJS({ name: 'Will' });
const newNameData = data.set('name', 'Susie');
console.log(data.get('name')); // 打印 'Will'
console.log(newNameData.get('name')); // 打印 'Susie'
В этом примере мы видим начальныйdata
Объект не изменился. Это означает, что при обновлении егоname
Стоимость свойстваSusie
не сопровождается непредсказуемым поведением.
Эта простая функция очень эффективна, особенно при создании сложных приложений. ЭтоImmutable
Основной.
существует
Immutable
Операции над объектами не изменяют исходный объект, а создают новый объект
ЗачемImmutable
Очень полезно
Фейсбукнекоторые инженеры вДокументация Главнаяразобрался в использованииImmutable
Преимущества, но немного запутанный. Вот некоторые из них, которые я собрал为什么你应该开始使用Immutable
:
Ваша структура данных предсказуема
потому что ваша структура данныхImmutable
, вы точно знаете, как работают ваши структуры данных. В сложных веб-приложениях это означает, что при нацеливанииUI
При внесении очень небольших изменений в структуру данных файла .
Надежность манипулирования данными
используяImmutable
Чтобы манипулировать данными, вам сложно ошибиться в этих операциях.Immutable
Сделал за вас много грязной работы:捕获异常
,提供默认值
а также开箱即用的创建嵌套数据结构
.
Чистый и читаемый код
Сначала вы можете быть правыImmutable
Функциональный дизайн 's сбивает с толку, но как только вы освоитесь, цепочка вызовов функций сделает ваш код менее читаемым и более читаемым. Это помогает команде поддерживать согласованность кода.
последующее исследование
несомненно,Immutable
Кривая обучения не очень гладкая, но оно того стоит.Get started
Учеба — это просто закуска.
Вот некоторые из предостережений, упомянутых ранее. Если вы принимаете это близко к сердцу, используйтеImmutable
Легко, как утка в воде.
- Структуры данных следует считать нативными
js
структура данных илиImmutable
объект -
Immutable
Операции над объектами всегда возвращают результат операции - существует
Immutable
Операции над объектами не изменяют исходный объект, а создают новый объект
удачи!
Если вам понравилась эта статья, пожалуйста, перейдите наоригинальныйПоставьте лайк и поделитесь с другими, также приглашаем посетить веб-сайт нашей компании.Pilcro.com.Pilcro
Это программное обеспечение для дизайна бренда.