Я использую immutable.js с моим потоковым приложением. Это очень полезно и дает повышение производительности. Но на самом деле меня огорчает тот факт, что я не могу использовать lodash вместе с ним. Lodash предоставляет отличный API с множеством полезных функций, поэтому мне интересно, может быть, есть способ собрать их вместе для работы для меня?
Любой способ использовать immutable.js с lodash?
Ответ 1
Недавно я написал обертку Lodash, предоставляющую поддержку Immutable.JS под названием mudash. Большинство основных функций Lodash поддерживаются тем, что они регулярно добавляются.
Ответ 2
Я предполагаю, что вы пытаетесь сделать что-то вроде карты lodash на неизменяемом наборе. Когда вы пытаетесь это сделать, Lodash не помогает.
Обратите внимание, что у immutable.js уже есть много собственных функций манипуляции (например, map
), а также его собственная ленивая цепочка ( через Seq
), поэтому вы должны изучить их.
Если вам нужно сделать что-то, что lodash
предоставляет, а immutable.js
- нет, вы можете сделать один из своих неизменяемых объектов и преобразовать его в объект Vanilla JS для потребления lodash.
Например:
// Do all of your fancy immutable.js stuff...
my_set = immutable.Set([1,2,3]).union(immutable.Set([2,3,4]))
// ...and then convert to JS before you do all of your fancy lodash stuff
mapped_set = _(my_set.toArray()).map(whatever)
Конечно, вы должны учитывать производительность, потому что в конечном итоге вы можете столкнуться с худшим из обоих миров, если вы будете конвертировать из одного в другое путем копирования ваших данных в структуру данных ванили. Например, в случае с игрушкой, например, вам, вероятно, будет лучше использовать immutable.js map()
напрямую.
Ответ 3
Вы можете использовать Ramda, если вы хотите сохранить неизменность и освободить свободные от побочных эффектов функции.
Библиотека предоставляет полезные функции, подобные lodash, но в стиле функционального программирования, которые никогда не мутируют пользовательские данные.
Рассмотрим этот пример React с использованием функции map в синтаксисе Ramda и ES6.
R.map(function, array);
Ответ 4
seamless-immutable направлен на предоставление API, который обратно совместим с валидными структурами данных JS.
Это позволяет использовать методы lodash. Однако, поскольку многие методы lodash написаны с изменчивостью в виду, они, вероятно, далеки от оптимального.
Ответ 5
Возможно, вы захотите проверить https://github.com/engineforce/ImmutableAssign, созданный мной, который является вечным неизменным помощником, который поддерживает неизменность и позволяет вам продолжите работу с POJO (обычный объект JavaScript). Поэтому вы можете использовать любые функции lodash.
Например,
var iassign = require("immutable-assign");
var _ = require("lodash");
var o1 = { a: { c: 1 }, b: [1, 2, 3] };
var o2 = iassign(
o1,
function(o) { return o.b; }, // get property to be updated
function(b) { // update select property
return _.map(b, function(i) { return i + 1; });
}
);
// o2 = { a: { c: 1 }, b: [2, 3, 4] }
// o1 is not modified
// o2 !== o1
// o2.b !== o1.b
// o2.a === o1.a
Ответ 6
Как использовать withMutations в ImmutableJS?
Найдите Batching Mutations
для краткого объяснения здесь.