[英]React changing parent state during input onChange getting stuck
我正在构建一个由至少50个输入组成的巨大形式。 我在表单组件中编写了一个函数,它将输入的值保存到表单状态:
父母的功能
saveToState(details) {
const { company } = this.state;
company[details.part][details.element] = details.value;
this.setState({ company });
}
通过儿童组件(输入)
<FieldInput
label="Name (as shown) *"
part="information"
element="displayName"
saveToState={this.saveToState}
/>
这是输入组件:
import React, { Component } from 'react';
export default class FieldInput extends Component {
render() {
const { label, part, element, saveToState } = this.props;
return (
<div className="field">
<label>{label}</label>
<div className="ui input">
<input
type="text"
name={`${part}[${element}]`}
onChange={(e) => saveToState({
part,
element,
value: e.target.value
})}
/>
</div>
</div>
);
}
}
结果每当我在输入中键入内容时,它需要200-300ms才能真正显示我在输入中写入的内容,状态是立即获得更新但是每当我键入一个字符时,我设置父表单的新状态并更新它更新整个组件。 我发现它的唯一方法是在父组件中使用saveToState
而不传递它。 但这需要1000行代码,有什么方法吗? 谢谢!
有很多方法可以解决这个问题。 最简单的一个是最快的一个是使用onBlur
而不是onChange
这样,当你按下输入但输入失去焦点时, setState
不会发生。
import React, { Component } from 'react';
export default class FieldInput extends Component {
render() {
const { label, part, element, saveToState } = this.props;
return (
<div className="field">
<label>{label}</label>
<div className="ui input">
<input
type="text"
name={`${part}[${element}]`}
onBlur={(e) => saveToState({
part,
element,
value: e.target.value
})}
/>
</div>
</div>
);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.