web-dev-qa-db-ja.com

lodashでimmutable.jsを使用する方法はありますか?

私はfluxアプリケーションで immutable.js を使用しています。これは非常に便利で、パフォーマンスを向上させます。しかし、実際に私を悲しませているのは、それと一緒に lodash を使用できないという事実です。 Lodashはたくさんの便利な関数を備えた素晴らしいAPIを提供しているので、それらをまとめて私のために機能させる方法があるのではないかと思います。

12
Glen Swift

私は最近、 mudash と呼ばれるImmutable.JSサポートを提供するLodashラッパーを作成しました。主要なLodash関数のほとんどがサポートされており、定期的に追加されています。

4
Brian Neisler

不変性と副作用のない関数が必要な場合は、 Ramda を使用できます。

ライブラリは、lodashに似ていますが、ユーザーデータを変更しない関数型プログラミングスタイルの便利な関数を提供します。

this React example ES6構文を使用してRamdaのflatten関数を使用することを検討してください。

import { flatten } from 'ramda';  

const users = ['Steve Jobs', ['Steve Wozniak']];
const flatUsers = flatten(users);

// returns ['Steve Jobs', 'Steve Wozniak']
8
Brett Hayes

不変のセットでlodashマップを実行するようなことをしようとしていると思います。あなたがそれを直接行おうとすると、Lodashは役に立たないことをしません。

Immutable.jsには、独自の操作関数( map など)と独自のレイジーチェーン(経由)がすでに多数あることに注意してください。 Seq )なので、それらを調べる必要があります。

lodashが提供し、_immutable.js_が提供しないことを行う必要がある場合、実行できることの1つは、不変オブジェクトを取得して、lodashで使用できるようにVanillaJSオブジェクトに変換することです。例えば:

_// 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)
_

もちろん、ここではパフォーマンスを考慮する必要があります。データをVanillaデータ構造にコピーして一方から他方に変換すると、両方の世界で最悪の結果になる可能性があるためです。たとえば、上記のおもちゃの場合は、immutable.js map()を直接使用したほうがよいでしょう。

6
waterproof

チェックアウトすることをお勧めします https://github.com/engineforce/ImmutableAssign 私が作成した、軽量で不変のヘルパーであり、不変性をサポートし、POJO(Plain Old 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
1
engineforce

ImmutableJSで withMutations を使用するのはどうですか?

検索する Batching Mutations簡単な説明 ここ

1
Artem Gavrysh

seamless-immutable は、VanillaJSデータ構造と下位互換性のあるAPIを提供することを目的としています。

これにより、lodashメソッドを使用できます。ただし、lodashのメソッドの多くは可変性を念頭に置いて記述されているため、おそらく最適とはほど遠いものです。

1
bryanph