2017-11-06 11 views
0

Reduxチームはselectors always return Immutable.JS objectsを提案していますが、セレクタが返すオブジェクトが複数の状態のスライスで構成されている場合、セレクタがImmutable.JSオブジェクトを返すことは困難です。Immutable.JSを使用する場合、reduxセレクタは常にImmutable.JSオブジェクトを返しますか?

例:shopping-cartデモをお試しください。それは不変を返すできるように、このセレクタを再構成する方法、Immutable.JSを使用する場合、この場合

export const getCartProducts = state => 
    getAddedIds(state).map(id => ({ 
    ...getProduct(state, id), 
    quantity: getQuantity(state, id) 
    })) 

:セレクタgetCartProductsを返すオブジェクトを構築するためにカートのスライス及び状態の製品のスライスの両方を使用します。 JSオブジェクト?

答えて

2

状態を変化させませすることが重要ですが、Immutable.JS

せずにこれを行うことができますあなたはReduxのでImmutable.JSを使用する必要はありません。プレーンJavaScriptは、正しく書かれていれば、不変的にフォーカスされたライブラリを使用することなく、不変性を完全に提供することができます。 redux faq

+0

私は変更不可能な状態のライブラリを使わずに、不変の状態を書き込む方法を知っています。しかし、私はImmutable.JSを使用するときに私の質問に記載されたケースをどう対処するのだろうか。それは私の質問です。 –

0

Immutable JSオブジェクトを使用し、そのメソッド.mapを使用する場合は、新しいImmutableJsオブジェクトを返します。あなたはバニラJSオブジェクトを持っており、それがImmutable.jsに変換したい場合は

https://facebook.github.io/immutable-js/docs/#/Map/map

は、ヘルパー関数fromJS() https://facebook.github.io/immutable-js/docs/#/fromJS

let some = {foo: 'bar'}; 
let immutableObject = Immutable.fromJS(some); 

ので、カップルのオプションがあります。

  1. は、あなたがそれが今であるようImmutable.js構造

  2. 実行時にmap関数を実行し、Immutable.jsにバニラから行う転送後Immutable.fromJS()

を使用していることを確認してください
+0

ありがとうございます。しかし、多分あなたは私のポイントを得ていないでしょう。私の指摘は、セレクタがImmutable.JSを使用しているときに必ずImmutable.JSオブジェクトを返すべきかどうかです。私が言及したケースでは、プレーヤのJSオブジェクトを返すセレクタはより合理的です。 –

+0

immutable.js構造体があれば、immutable.jsオブジェクトまたはノード値が返されます。ノード値がjsオブジェクトの場合、jsオブジェクトが返されます。 –

関連する問題