首先,您必须定义输入的含义。通常,可以通过在每次击键后将timeOut 设置为几毫秒来完成(如有必要,重新启动它)。
大致可以用这个实现“打字状态检查”(注意这个例子非常简化!):
constructor(props) {
super(props);
this.state = {
isTyping: false,
inputValues: {
input1: '',
input2: '',
input3: ''
}
}
}
const handleChange = (event, label) => {
this.setState(prevState => ({inputValues: {...inputValues, [label]: event.target.value}, isTyping: true}), setTimeout(revertIsTypingToFalse, 500))
}
render() {
return (
<div>
<input onChange={event => this.handleChange(event, 'input1')} value={this.state.inputValues.input1} disabled={this.state.isTyping}>
<input onChange={event => this.handleChange(event, 'input2')} value={this.state.inputValues.input2} disabled={this.state.isTyping}>
<input onChange={event => this.handleChange(event, 'input3')} value={this.state.inputValues.input3} disabled={this.state.isTyping}>
</div>
);
}
(revertIsTypingToFalse 将是一个执行它所说的函数 - 将 isTyping 状态设置回 false)
现在,要在您开始输入时禁用所有这些,您可以将其添加到 <input>:
<input ...
disabled={isTyping}
/>
但您自然希望保持当前正在输入的输入框处于启用状态。为此,您可以将上次输入的标签保存为如下状态:
handleChange(event, label){
this.setState(prevState => ({inputValues: {...inputValues, [label]: event.target.value}, isTyping: true, lastInput: label}), setTimeout(revertIsTypingToFalse, 500))
}
(记得在构造函数中添加lastInput到状态!)
现在您可以通过将上次使用的输入标签与各个输入框标签进行比较来禁用所有未输入的输入,如下所示:
<input
...
disabled={isTyping && lastInput !== 'input1'}
/>
Voula,给你!