javascript - 为每个领域反应 OnChange - 有没有更好的方法
问题描述
我调用 API,获取有效负载并将其加载到状态。例如:
Payload : {
id: 1,
firstName: 'Craig',
surname: 'Smith',
anotherField: 'test data',
....
}
(注意,现实生活中大约有 20 个字段)
在我的反应屏幕上,我有显示这些数据的字段。目前,对于每个字段,我都有一个 onChange 函数。所以:
this.firstnameOnChange = this.firstnameOnChange.bind(this);
然后是函数:
firstnameOnChange() { ....}
是否有更简单的模式可以减少我需要创建的方法数量?某种具有名称和值的通用 OnChange 事件,然后可用于更新状态?
我可以绑定到类似的东西:
myOnChange(fieldName, value) {
// Somehow find the 'fieldName' in the state and update it's value with 'value'
}
这是一个有效的模式吗?或者,还有更好的方法?或者我应该坚持为每个字段使用单独的 OnChange 方法?
如果我可以通用,我将如何找到要更新的状态字段的名称?
解决方案
不,不建议onChange
为每个字段都写。你可以像这样编写一个通用的 onChange 方法:
handleChange= name => event => {
this.setState({payload: {...this.state.payload, [name] : event.target.value}});
}
例如,您有这样的输入:
<Input onChange={this.handleChange('firstName')} placeholder="Please Enter" />
PS这里我们直接调用handleChange,所以我们使用currying
意味着为每次调用创建一个新实例。还有另一种方法是提取name
表单event.target
并在您的输入中创建一个name
属性。然后您不需要显式传递输入名称。
推荐阅读
- c# - 带有绑定到列的子句的 LINQ 查询
- c# - 在 C# Winforms 中使用 MouseEvents 更改图表系列的外观
- python - TurtleBot 2i Catkin_Make 给出:ModuleNotFoundError: No module named 'catkin_pkg.terminal_color'
- python - 根据任意字段查找字典列表的交集
- python - 在Django中读取文件夹中的所有图像文件
- javascript - 如何使用 JavaScript 更改 CreateTextNode 的样式
- css - HTML/CSS 如何通过将其堆叠为一列来使显示响应较小的屏幕?
- python - 如何在 Python 中获取音频文件的脉冲宽度?
- javascript - 在javascript中的所有单个大写字母和大写字母组之后添加一个句点
- javascript - 向上打开的折叠边