在光标处插入反应

wiz*_*rd0 5 javascript textarea reactjs

我需要在React控制的textarea中插入文本(当前光标位置)(如自动完成).

对于vanilla textarea,我使用了以下代码:

insertAtCursor: function (myField, myValue) {
    // IE
    if (document.selection) {
        myField.focus();
        var sel = document.selection.createRange();
        sel.text = myValue;
    } 
    // FF
    else if (myField.selectionStart || myField.selectionStart == '0') {
        var startPos = myField.selectionStart;  var endPos = myField.selectionEnd;
        myField.value = myField.value.substring(0, startPos)
        + myValue + myField.value.substring(endPos, myField.value.length);
    } else {
        myField.value += myValue;
    }
}
Run Code Online (Sandbox Code Playgroud)

但它在React中不起作用.我该怎么做?

Bri*_*and 4

您需要通过执行以下操作来获取节点this.getDOMNode()。根据代码的其余部分,您可能需要在该节点中查找文本区域;或者将您的文本区域重构为自己的组件并使用 refs。

insertAtCursor: function (myField, myValue) {
    var myField = this.getDOMNode();

    // the rest of your code
}
Run Code Online (Sandbox Code Playgroud)

更好的选择是只确定光标位置,然后插入新字符串;并将其存储回您的状态。这就是我推荐的。

var index = getCursorPosition();
this.setState({
  value: this.state.value.slice(0, index) + theNewString + this.state.value.slice(index + 1)
})
Run Code Online (Sandbox Code Playgroud)

  • 是的,听起来不错,事实上我已经做了 setState,但是如何在插入文本后移动插入符号,以便 React 尊重之后的移动?像这样: AAA|BBB -> AAACCC|BBB (2认同)