javascript - Reactjs handleChange 与更改数组中的子数据
问题描述
有一个经典的手柄更改功能。我可以更改同一目录中的数据。没有问题。但我有子数据。我无法改变它们。我想把它当作干净的东西来处理,而不需要在 handlechange 中输入额外的函数。我该怎么做?
我的状态:
this.state = {
formData: {
appointedBroker: '',
propertyInformations: {
rent: false,
property: {
housing: false,
},
features: {
rooms: ""
},
location: ""
},
}
}
我的handleChange函数:
handleChange(event) {
const { formData } = this.state;
formData[event.target.name] = event.target.value;
this.setState({ formData });
}
和我的投入
<TextField
value={propertyInformations.features.rooms}
onChange={(e) => this.handleChange(e)}
id="rooms"
name={'rooms'}
type={'text'}
label={t('Rooms')} />
在这种情况下,我只是更改了“指定经纪人”数据,例如;我想换“房间”
解决方案
在你的handleChange
职能中,你是directly mutating the state
违背React
模式的。这样做会使更新未被检测到,例如componentDidUpdate
.
推荐的方法是这样的:
handleChange(event) {
this.setState(prevState => ({
formData: {
...prevState.formData ,
[prevState.formData.propertyInformations.features.rooms]: e.target.value,
},
}));
}
推荐阅读
- node.js - React.js + Node.js - 从服务器响应时出错。“UnhandledPromiseRejectionWarning:错误:请求失败,状态码 304”
- jenkins - 您如何从 Jenkins 另一项工作的最后 2 个稳定版本中获取工件?
- gpu - 使用 CPU 工作人员进行数据处理,并使用带有 dask 的 GPU 工作人员训练 xgboost
- adfs - 使用 ADFS 作为 SAML IdP 的 Gigya - 如何将组添加到 Gigya 帐户
- mysql - 使用 hpa 扩展 mysql 在 Kubernetes 上创建一个空数据库
- ssis - SSIS DTSX 提取对象名称和 SQL 语句
- nginx - Nginx 重定向到不需要的端口
- sass - Netlify 部署
- macos - macOS Apple M1 上的 TensorFlow
- javascript - ReferenceError:客户端未定义 Discord.js