Facebook removed Flux's MapStore以来、私はその店のオブジェクトを突然変異させる最良の方法を考え出すのに苦労しています。Fluxストアでオブジェクト値をどのように変更しますか?
ReduceStoreはこの問題を処理できると思われています。Cássiode Sousa AntonioのPro-Reactの本にはReduceStoreの例がいくつかありますが、どれもこの機能を強調していません。
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
私が試した:
state.foo = action.value;
return state;
が、これはすべての変更をトリガーしないことを。
更新:不変を使用して
が働いた:
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;
}
}
}
しかし、今のレンダリング方法で、私は地図のゲッター機能を使用するに注意する必要があり、例:
const bar = this.props.foo.get('bar');