[英]Set state of object property
我有这个工厂方法为每个更改处理程序创建函数:
makeHandleChange = changedProperty => newVal => {
const newState = { ...this.state, [changedProperty]: newVal };
this.setState({ ...newState });
};
它正在执行,例如:
onChange={this.makeHandleChange('phoneNumber')}
如何使用此函数设置属性对象的状态?
例如,我必须setState
info.phoneNumber
属性:
state = {
info: {
phoneNumber: '',
},
}
我怎样才能用这个makeHandleChange
函数做到这makeHandleChange
?
有两种方法可以让它发挥作用。 一种是更新您的工厂代码,以便将嵌套状态属性考虑在内。 另一种可能更简单的方法是在需要更新状态时传入整个嵌套对象。
例如,如果您有一个input
字段更新嵌套在this.state.info
的phoneNumber
属性:
<input
type="text"
onChange={e => this.makeHandleChange("info")({ ...this.state.info, phoneNumber: e.target.value})}
value={this.state.phoneNumber}
/>
在传递给函数的对象中,确保在设置新值之前销毁this.state.info
(即...this.state.info
),以便其他嵌套属性不会被覆盖/删除。
您可以通过破坏以前的info
状态属性来执行以下操作:
makeHandleChange = changedProperty => newVal => {
this.setState(prev => ({ info: { ...prev.info, [changedProperty]: newVal } }));
};
此解决方案使用setState
的回调版本。
它等效于以下代码:
makeHandleChange = changedProperty => newVal => {
const { info } = this.state
this.setState({ info: { ...info, [changedProperty]: newVal }});
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.