今私はreselect
を使用してセレクタを作成し、ストアからデータを抽出し、connect
経由でprops
に渡します。簡単にするために、 を私のセレクタの結果は常にJSオブジェクトである(セレクタの終わりにtoJS()
を呼び出す)、このような何か:immutable-jsでreduxを使用する場合 - セレクタでtoJS()を呼び出しますか?または、レンダリング機能で.get( 'prop')を使用しますか?
const selector = state => state.get('data').toJS();
今、私はいくつかのパフォーマンスを改善しようとしていると私はそのshouldComponentUpdate
を実現しました浅い比較は、私がセレクタから戻ってくる方法のため、不変性の利点を失います。一方、私のhtml内.get('prop')
を使用すると、非常に迷惑
を思わ:
<div>{this.props.data.get('prop')}</div>
私はこのように、変更可能である子コンポーネントに簡単なJSオブジェクトを渡すケースを持っている場合は特に:
<ChildComponent totalItems={10} />
そして、小道具にアクセスする際に一貫性がありません(変更可能なものと不変なものがあります)。
私は、ヘルパーunwrap
関数を作成すると考え、このような何か:..私は本当に、これらのアプローチのいずれか好きではない
const unwrap = obj => obj && obj.toJS ? obj.toJS() : obj;
しかし、私は本当にこのソリューション好きではありません。
クリーンコード&の両方に何を使用しますか?
私はあなたの答えの第2部に同意します。しかし、私のマークアップ内で 'Immutable.fromJS'を使う例は、変更可能な/変更不能な小道具を混在させるよりも邪魔になります。 –
あなたの小道具データは常に不変ですが、あなたのコンポーネントに新しいデータがあり、子コンポーネントに、不変です。fromJS()は、すべての小道具を再び不変として渡すための良いアプローチです。 –
私には、不変を使用する際の真の価値は、不変を使用してスタック全体を照らし出すだけです。これは、あなたがすべてのコンポーネントでshouldComponentUpdateの純粋な実装を使用できるようにするものです。 toJを呼び出すのは面白いアイデアだと思う。セレクタでJSON.stringify/JSON.parseを呼び出しますか? – rooftop