2016-10-10 1 views
0

新しいImmutableJSオブジェクトが作成されるたびに関数をトリガーしたいと思います。 Reactアプリケーションの状態としてImmutableJSオブジェクトを使用したいと思い、定型コードを減らしたいと思います。ここでImmutableJSの変更をリッスンしていますか?

は、私が今持っているものの一部です:

function addTodo(text) { 
    let state = store.getState(); // Gets ImmutableJS object. 
    state.get('todos').push(text); // Store listens to change and replaces the current state with the newly created state. Store automatically triggers rerender. 
} 

可能これです:

function addTodo(text) { 
    let state = store.getState(); // Gets ImmutableJS object. 
    let todos = state.get('todos'); 
    let newState = state.set('todos', todos.push('text')); 
    store.update(newState); // Triggers rerender. 
} 

ここで私はそれのようになりたいことは?

addTodowithMutationsにまとめましたが、withMutationsでは浅い変異のみが許されています。

+0

可変オブジェクトを使用したくないという不変な点はありませんか?ボイラープレートコードを削減したい場合は、より高次の関数を追加するのはどうですか? – David

+0

'shouldUpdateComponent'では不変であることを望みます。この場合、上位関数はどのように役立ちますか?あなたは引数として 'addTodo'に状態を渡して新しい状態を返しますか?一つの関数で状態を何度も更新することができ、 'state.set'を何度も呼び出さなければなりません。 –

+1

reactjsのアプリケーション状態を処理するためにhttps://github.com/reactjs/reduxを見て、より速い 'shouldUpdateComponent'のために不変オブジェクトとして状態を保存してください。私はこれですでにいくつかのプロジェクトを行っていました。 Reduxは、状態の変更に関するコンポーネントへの通知を処理します。 –

答えて

0

ルーカスのコメントに同意します。これは本当にReduxのためのものです。ストアの状態を変更すると、新しい値でコンポーネントツリーを強制的に再レン​​ダリングします。
私はImmutable.js自体に観察可能な関数を認識していません。その機能を持つ第3の部分ライブラリがあるかもしれません。

+0

Reduxレデューサーは、まったく変わらないメソッドです。状態(現在のImmutableJSオブジェクト)+アクション(immutableJSメソッド名と引数) - >新しい状態(新しいImmutableJSオブジェクト)私は現在、CortexとBaobabで遊んでいます。 –

関連する問題