我可以创建动态状态,例如以下示例:
constructor(props) {
super(props);
this.state = {};
}
使用此方法创建状态:
func(name){
this.state[name];
}
和setState与此:
func2(name,value){
this.setState({[name]:value});
}
所以
this.func('color');
this.func('size');
我有this.func.color
和this.func.size
。对吧?
有效。
但是我想要这样的东西。我想以'names'
状态创建所有新的动态状态。
constructor(props) {
super(props);
this.state = {names:[]};
}
names
是正常状态。
func(name){
this.state.names[name];
}
func2(name,value){
this.setState({names:{[name]:value}:});
}
我将此功能称为:
func('color');
func('size');
func2('color','red');
func2('size','larg');
我期望console.log(this.state.names)
这样:
{color:'red',size:'larg'}
但是我只得到{size:'larg'}
(第二个功能)
我怎么了?
答案 0 :(得分:3)
再次调用names
时,您将覆盖this.setState
的值。
您正在有效地做
this.setState({ names: { color: 'red' }});
this.setState({ names: { size: 'large' }});
请考虑在Object.assign()
中使用func2
,以确保您没有替换要向其添加属性的对象。
func2(name,value) {
this.setState({
names: Object.assign(this.state.names, {[name]: value})
});
}