Любой способ использовать immutable.js с lodash?

Я использую immutable.js с моим потоковым приложением. Это очень полезно и дает повышение производительности. Но на самом деле меня огорчает тот факт, что я не могу использовать lodash вместе с ним. Lodash предоставляет отличный API с множеством полезных функций, поэтому мне интересно, может быть, есть способ собрать их вместе для работы для меня?

Ответ 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 для краткого объяснения здесь.