2017-02-21 2 views
2

Das ist etwas, das ich nicht richtig verstehe.Was nutzt immutable.js bei der Verwendung von redux?

Bei der Verwendung von Redux verwenden wir in Reduzierern den Spread-Operator.

Für z.B.

{...state,data : action.payload,fetching:false}

Das ist ein neuer Zustand Objekt erstellt wird, anstatt vor, den korrekten Zustand mutiert? (Bitte korrigieren Sie mich, wenn ich falsch liege)

In solchen Fällen, was ist die Verwendung von immutableJS? Es führt die gleiche Aktion wie oben erwähnt richtig aus ??

Antwort

2

Sie haben Recht, das Beispiel, das Sie gezeigt haben, erstellt ein neues Objekt und mutiert den Zustand nicht. Es ist in vielen Fällen in Ordnung, wenn Sie also nicht glauben, dass ImmutableJS etwas für Sie hinzufügen wird, verwenden Sie es nicht.

ImmutableJS war nützlicher, bevor der Spread-Operator in ES6 gebräuchlich war (ich glaube, es ist technisch still only a proposal). Wenn Sie ES6 nicht verwenden, ist die Alternative Object.assign, die sehr schnell sehr unordentlich werden kann, besonders bei verschachtelten Strukturen.

ImmutableJS ist immer noch nützlich, wenn Sie einen einzelnen Knoten tief innerhalb des Statusbaums ändern müssen, aber wenn dies der Fall ist, können Sie es in der Regel umgehen, indem Sie die Daten auf andere Weise strukturieren.

+0

Ja, es gibt gemischte Vorteile zu verwenden. Ich würde sagen, es ist nicht so unordentlich, wenn Sie eine normalisierte Datenstruktur haben, und zu diesem Zeitpunkt verliert Immutable einige der Vorteile einer einfachen API, um tiefere Änderungen vorzunehmen, da Sie keine tiefen Bäume haben werden. Abgesehen davon glaube ich immer noch, dass Immutable Sie zwingt, bei all Ihren Datenänderungen unveränderlich zu sein, und stellt sicher, dass andere Entwickler das auch tun müssen, während Sie eine praktische API verwenden. Ich persönlich würde es empfehlen – JonE

+0

Ja, das ist ein toller Punkt. Ich bin sehr daran interessiert, Bibliotheken nur dann zu verwenden, wenn es sinnvoll ist. Wenn also die Codebasis geteilt wird, wäre meiner Meinung nach die Durchsetzung von Unveränderbarkeit ein vernünftiger Grund, sie zu verwenden. –

+0

"und an diesem Punkt verliert Immutable einige der Vorteile einer einfachen API, um tiefere Änderungen vorzunehmen, da Sie keine tiefen Bäume haben werden" @ Glitch100 Können Sie es bitte ausarbeiten? –

0

Wenn Sie Ihren Zustand unveränderlich machen, stellen Sie sicher, dass der Zustand außerhalb des Flussflusses nicht geändert wird. In sehr komplexen Strukturen mit vielen Ebenen und Requisiten wird verhindert, dass der Staat versehentlich mutiert wird.

1

Wenn Sie einen einfachen flachen Zustand haben, können Sie ihn einfach ohne zusätzliche Bibliotheken verwalten.

Aber lassen Sie uns etwas komplizierter prüfen, wie die folgende

{ 
    users: { 
    123: { 
     name: 'John', 
     lastName: 'Doe' 
    }, 
    345: { 
     name: 'Bob', 
     lastName: 'Jack' 
    } 
    .... 
    } 
} 

Wenn Sie einen Namen für einige Benutzer aktualisieren möchten, wird es nicht so trivial

return { 
    ...state, 
    users: { 
    ...state.users, 
    [action.userId]: { 
     ...state.users[action.userId], 
     name: action.newName 
    } 
    } 

Ziemlich viel Code, isn oder? In diesem Moment möchten Sie vielleicht nach einer anderen Lösung suchen und immutable.js kann Ihnen helfen, das Gleiche mit einer Zeile zu tun:

Verwandte Themen