2016-10-10 4 views
0

Ich möchte eine Funktion auslösen, wenn ein neues ImmutableJS-Objekt erstellt wird. Ich möchte ein ImmutableJS-Objekt als meinen React-Anwendungszustand verwenden und den Standardcode reduzieren.Auf ImmutableJS-Änderungen warten?

Hier ist ein Teil von dem, was ich habe jetzt:

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. 
} 

Hier ist, was ich will es wie sein:

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. 
} 

Ist das möglich?

Ich habe versucht, die gesamte addTodo in withMutations, aber withMutations nur flache Mutationen ermöglicht.

+0

Ist nicht der Punkt bei immutableJS, dass Sie keine veränderbaren Objekte verwenden möchten? Wie wäre es, eine Funktion höherer Ordnung hinzuzufügen, wenn Sie den Standardcode reduzieren möchten? – David

+0

Ich möchte, dass es für 'shouldUpdateComponent' unveränderbar ist. Wie würden in diesem Fall Funktionen höherer Ordnung helfen? Du meinst den Status "addTodo" als Argument übergeben und den neuen Zustand zurückgeben? Ich könnte den Zustand mehrere Male in einer Funktion aktualisieren und ich müsste 'state.set' noch mehrere Male aufrufen. –

+1

Sehen Sie sich https://github.com/reactjs/redux an, um den reactjs-App-Zustand zu behandeln und speichern Sie dann den Status als unveränderliche Objekte für eine schnellere 'shouldUpdateComponent'. Ich habe schon mehrere Projekte damit gemacht. Redux wird Benachrichtigungen über Statusänderungen an Ihre Komponenten verarbeiten. –

Antwort

0

Stimmen Sie Lukas Kommentar zu. Das ist wirklich, wofür Redux ist. Sie mutieren den Zustand Ihrer Filialen und erzwingen ein erneutes Rendern Ihrer Komponentenbaum (e) mit den neuen Werten.
Ich bin nicht bewusst, irgendeine Art von beobachtbaren Funktionen in Immutable.js selbst, könnte es eine dritte Teilbibliothek, die diese Funktionalität obwohl.

+0

Redux Reducer sind nur ImmutableJS-Methoden. State (aktuelles ImmutableJS-Objekt) + action (Name und Argumente der ImmutableJS-Methode) -> new state (neues ImmutableJS-Objekt). Ich spiele gerade mit Cortex und Baobab. –