javascript - 输入时表单输入非常慢/延迟
问题描述
我有一个由 2 个对象组成的表单 - A 和 B 两个对象都有大约 20 个变量。
当它键入时,在使用该值更新状态之前会有几秒钟的延迟。
我的状态是这样的,数据是从父组件传入的:
export class Booking extends Component<any, BookingProps & BookingState> {
constructor(bookingProps: BookingProps) {
super(bookingProps);
this.state = {
a: bookingProps.a,
b: bookingProps.b,
errors: {}
... around six other objects for modal, default data etc
};
}
许多输入表单的表单域是这样的:
<Form.Field>
<label htmlFor="ref">Ref</label>
<input
placeholder="Ref"
value={this.state.a.ref}
id="ref"
onChange={this.handleBookingFieldChange}
style={{ backgroundColor: 'lightgrey' }}
/>
</Form.Field>
this.state.b.ref
在 state.b 的其他表单字段部分中,除了 value和 onChange之外,它完全相同onChange={this.handleBookingExtrasChange}
。
所以基本上我对状态 a 和 b 有单独的 onChange 处理程序:
private handleBookingFieldChange = (e: any) => {
const key = e.target.id;
const value = e.target.value;
this.setState({
booking: { ...this.state.a, [key]: value }
});
};
因此,当我键入时,字母出现在文本字段中大约需要 3 秒钟。我是 React 的新手(来自 Angular),想不出为什么要花这么长时间才能显示我输入的内容。
我猜该州正在更新每个字段,但我不确定。我能做些什么来加快速度?
解决方案
我发现通过稍微切换输入将在您键入时起作用 - 本质上是设置defaultValue
代替value
和使用onBlur
代替onChange
。现在,输入时表单字段会更新:
<Form.Field>
<label htmlFor="ref">Ref</label>
<input
placeholder="Ref"
defaultValue={this.state.a.ref}
id="ref"
onBlur={this.handleBookingFieldChange}
type={'number'}
/>
</Form.Field>
推荐阅读
- ios - 目标c中的CGRect Swift代码等价
- reactjs - React/Material UI 中的唯一键
- php - 使用 PHP 将 JSON 转换为 MYSQL TABLE
- reactjs - 如何从表单太数组添加输入
- python - 将 xlsxwriter set_row 绑定到最后一列
- hidden-markov-models - 隐马尔可夫 R 包 - 维特比函数 - 错误预测的状态
- config - 如何在目录中包含所有 alsa 配置文件?
- sql - 如何查询数据库中所有域的定义?
- powershell - 执行脚本时如何要求提供参数
- assembly - 对访问字符串中的字符的反汇编中的取消引用操作感到困惑