javascript - 从 setTimeout 调用 setState 会导致文本字段光标意外跳转
问题描述
在此示例中向输入字段添加几次击键,然后将插入符号放在文本中的某个位置并添加另一个击键后,插入符号将跳转到输入字段的末尾,而不是保留其位置。当setState
呼叫不在 内时,不会发生这种情况setTimeout
。为什么异步setState
会导致这些问题?setState
有没有办法在异步调用的同时获得所需的行为?
class Hello extends React.Component {
constructor(props) {
super(props);
this.state = {value: ""};
this.handleState = this.handleState.bind(this);
}
handleState(event) {
const value = event.target.value;
setTimeout(() => {
this.setState({value: value});
}, 10);
}
render() {
return <input
value={this.state.value}
onChange={this.handleState} />;
}
}
ReactDOM.render(
<Hello />,
document.getElementById('container')
);
解决方案
推荐阅读
- java - 将 Java 项目转换为 Maven 项目 - 无法找到或加载主类
- java - 方法检查字符串是否匹配模式不起作用
- javascript - 为什么我在 React 中得到“无法读取未定义的属性(读取 'map')”,而没有语法错误
- c# - 无法在 asp net core 样板中回滚事务
- r - 如何在 R 中自定义 Facet_Grid 字体标签
- php - 设置请求内容以在 symfony 中测试
- python - 如何每天用python查询一个非常大的在线csv文件以获取新信息?
- image-processing - 如何为 CVAT 中的多边形标签启用“制作 AI 多边形”选项?
- jquery - Locomotive Scroll:是否可以将 querySelector 与 URL 和锚标记一起使用?
- android - BLE 连接问题:我的应用程序作为广播器工作,并且 BLE 设备有时无法连接到我的应用程序