2016-05-17 10 views
0

Ich versuche immutableJS zu Mern.io hinzuzufügen. Wenn ich versuche, einen Beitrag aus meiner Beitragsliste zu entfernen, setze ihn in meinem Status zurück, der Status wird nicht aktualisiert.Warum ändert sich mein Zustand nicht mit immutableJS?

case ActionTypes.DELETE_POST : 
    const removeArray = state.get('posts') 
       .filter((post) => post._id !== action.post._id) 
    console.log(removeArray.length) 
    state.set('posts', removeArray) 
    console.log(state) 
    return state; 

In diesem Beispiel, wenn ich ein Array von 5 habe ich sollte es in der Lage sein, um herauszufiltern dann „Beiträge“ wieder mit dem neuen Array. Was ich nicht verstehe ist, dass ich das Objekt aus dem Array entfernen kann und das removeArray um eins weniger als state.posts ist. Aber wenn ich den Protokollierungsstatus trage, ist es dasselbe. Was vermisse ich?

Antwort

6

Wenn Sie state.set(...) aufrufen, wird ein neues Objekt zurückgegeben. Das Original state ist unverändert. Ich änderte 3 Zeilen in Ihrem Snippet:

case ActionTypes.DELETE_POST : 
    const removeArray = state.get('posts') 
       .filter((post) => post._id !== action.post._id) 
    console.log(removeArray.length) 
    const newState = state.set('posts', removeArray) // assign to another variable 
    console.log(newState) // and log here 
    return newState; // and you'll probably want to return the new state 
+0

Es macht auch Sinn, 'state.update zu wechseln (‚Beiträge‘, ...)' – zerkms

+3

Dies ist eine Art des ganzen Sinns der Immutable.js mit :) – RJo

+0

@zerkms Vielen Dank für die Aktualisierung des Snippets! – franky

Verwandte Themen