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');