2017-01-26 5 views
1

Seit Facebook removed Flux's MapStore, habe ich eine harte Zeit herauszufinden, die beste Möglichkeit, ein Objekt in seinem Geschäft zu mutieren.Wie ändern Sie Objektwerte mit Flux Stores?

ReduceStore soll in der Lage sein, mit diesem Problem umzugehen, und das Pro-React-Buch von Cássio de Sousa Antonio hat mehrere Beispiele für ReduceStore, aber keiner von ihnen hebt diese Funktionalität hervor, und ich bin ein bisschen verloren.

class MyObjectStore extends Flux.ReduceStore { 
 

 
    getInitialState(){ 
 
    return { 
 
     foo: '', 
 
     bar: '', 
 
     baz:'' 
 
    }; 
 
    } 
 

 
    reduce(state, action){ 
 
    switch (action.type) { 
 
     case constants.CHANGE_FOO: 
 
     return state.set('foo', action.value) 
 
     case constants.CHANGE_BAR: 
 
     return state.set('bar', action.value) 
 
     case constants.CHANGE_BAZ: 
 
     return state.set('baz', action.value) 
 
     default: 
 
     return state; 
 
    } 
 
    } 
 
} 
 

 
export default new MyObjectStore(AppDispatcher); 
 

 
// => TypeError: state.set is not a function

Ich habe versucht:

state.foo = action.value; 
 
return state;

aber tun dies löst keine Änderungen.

AKTUALISIERT:

Mit Immutable gearbeitet:

import Immutable, {Map} from 'immutable'; 
 

 
class MyStore extends ReduceStore { 
 

 
    getInitialState(){ 
 
    return Map({ 
 
     foo: '', 
 
     bar: '', 
 
     baz: '' 
 
    }); 
 
    } 
 

 
    reduce(state, action){ 
 
    switch (action.type) { 
 
     case constants.CHANGE_FOO: 
 
     return state.set('foo', action.value) 
 
     case constants.CHANGE_BAR: 
 
     return state.set('bar', action.value) 
 
     case constants.CHANGE_BAZ: 
 
     return state.set('baz', action.value) 
 
     default: 
 
     return state; 
 
    } 
 
    } 
 
}

jedoch jetzt in der Rendering-Methoden, muss ich verwenden, vorsichtig sein Karte des Getter-Funktionen ab:

const bar = this.props.foo.get('bar');

Antwort

0

Ihr Ausgangszustand ist ein einfaches Objekt, aber Ihr reduce scheint opperating auf unveränderliche Objekte zu werden. Das heißt, wenn reduce das erste Mal aufgerufen wird, state ist ein einfaches Objekt ohne set -Eigenschaft, geben Sie den TypeError Sie erwähnen. Ändern Sie Ihre getInitialState, um eine unveränderliche Karte (z. B. wickeln Sie, was Sie haben in Map(...)) wird es beheben.

Verwandte Themen