您必须在状态更新 更改光标位置(setState()
不会立即发生变化this.state
)
为此,您必须包装this.refs.input.selectionStart = this.refs.input.selectionEnd = start + 1;
一个函数并将其作为第二个参数传递给setState
(回调)。
handleKeyDown(event) {
if (event.keyCode === 9) { // tab was pressed
event.preventDefault();
var val = this.state.scriptString,
start = event.target.selectionStart,
end = event.target.selectionEnd;
this.setState(
{
"scriptString": val.substring(0, start) + '\t' + val.substring(end)
},
() => {
this.refs.input.selectionStart = this.refs.input.selectionEnd = start + 1
});
}
}