2015-12-23 10 views
6

は私がにsetInt()の使用を見て、いくつかの反応-Reduxのコードで()を設定しました:私はここにいくつかのドキュメントhttps://facebook.github.io/immutable-js/ を発見しました。しかし、残念ながらこの方法を詳細に文書化されていないreact-redux:state.setIn()とstate.set()の違いは何ですか?

state.setIn(...); 
state.set(...); 

他の質問もあります:Using React's immutable helper with Immutable.js しかし、これらは私の質問には答えません。

私は、不変のものを何かしなければならないと理解しています。 ここで不変のものは何ですか? set()とsetIn()の違いは何ですか? なぜ不変である必要がありますか?

+0

両方[セット](https://facebook.github.io/変更可能な設定を使用することは可能ですか?(不変のjs/docs /#/ List/set)と[setIn](https://facebook.github.io/immutable-js/docs/#/List/setIn)は文書化されています –

答えて

15

変更不可能setメソッドは、即時プロパティのみを設定します。オブジェクトの直接の子供。 setInディープノードの値をデータの下に設定しましょう。 setはプロパティ名のみを使用します。 setInは深くネストされた要素に到達するためにキー/インデックスの配列をとります。店舗内の状態を更新するときに、一般的なアクションを使用すると、子コンポーネントへのキーのパスを供給できるよう

var basket = Immutable.Map({"milk":"yes", "flour":"no"}); 

basket = basket.set("flour", "yes"); 

basket = Immutable.Map({"fruits":{"oranges":"no"}, "flour":"no"}); 

basket = basket.setIn(["fruits", "oranges"], "yes"); 

getIn/setIn方法は非常に便利です。パスとしてパスを渡すアクションをパラメータとして呼び出すことができます。

+0

果物全体の代わりにフル果物オブジェクト。 – BigDong

+1

はい。 'basket = basket.setIn([" fruits "]、Immutable.fromJS({" oranges ":" yes "}));' – hazardous

0

setおよびsetInは、リストまたはマップオブジェクトにデータを設定するために使用するimmutablejsメソッドの1つです。これで理解するための簡単な例では、あなたが持っていると言うことができます。この

//あなたが最新の初期状態を更新する必要がありfromJS、この場合にはimmutablejsライブラリ

const iniState = fromJS({ 
    name:null, 
    friends:fromJS({ 
     name:null 
    }), 
}) 

から来ている別の方法であることに注意してくださいそこではsetメソッドとsetInメソッドを使用できます。

iniState.set('name',"sibusiso Massango").setIn(['friends','name'],"Zweli Mathebula");

これは、あなたがこれについての詳細を見つけるために、setsetInメソッドを使用する方法であるあなたは、このドキュメントを読むことができますhttps://facebook.github.io/immutable-js/docs/

関連する問題