我在组件中有以下代码:
constructor() {
this.state = Immutable.fromJS({
user : {
wasChanged : false,
firstName : false,
lastName : false,
address : {
street : false,
}
}
});
}
onEdit({target: {dataset: {target}}}, value) {
this.setState(function (prevState) {
return prevState.setIn(['user', target], value);
});
}
render() {
var user = this.state.get('user').toJS();
...
}
问题在于,当我尝试更新 onEdit 中的值时,我发现 prevState 具有不同的原型集。我不明白为什么或我做错了什么。我在控制台中看到了这个
> Object.getPrototypeOf(this.state)
src_Map__Map {@@__IMMUTABLE_MAP__@@: true}
> Object.getPrototypeOf(prevState)
Object {}
状态改变后,它会进行渲染,当然无法找到 get 函数或者来自Immutable的任何内容
使用与插件的反应0.13.3。
答案 0 :(得分:6)
把它作为国家的关键。
this.state = {
data: Immutable...
};
目前你不能使用Immutable对象作为状态的原因与你不能做this.state = 7
的原因相同:它不是一个普通的JavaScript对象。
粗略地说,操作如下:
React.Component.prototype.setState = (changes) => {
batchUpdate(() => {
// copies own properties from state to the new object
// and then own properties from changes to the new object
var nextState = Object.assign({}, state, changes);
this.componentWillUpdate(...);
this.state = nextState;
queueDomUpdateStuff(this.render(), () => this.componentDidUpdate());
});
};
答案 1 :(得分:2)
组件'state
应该是一个普通的JavaScript对象;该对象的值可以是不可变值。在issue 3303中讨论了支持不可变值的状态。