javascript - 在光标处插入 react

标签 javascript textarea reactjs

我需要在 React 中的插入符号(当前光标位置)处插入文本-controlled textarea(如自动完成)。

对于 Vanilla 文本区域,我使用了这段代码:

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;
    }
}

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

最佳答案

您需要通过执行 this.getDOMNode() 获取节点。根据您的其余代码,您可能需要在该节点中找到文本区域;或将您的 textarea 重构到它自己的组件中并使用 refs。

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

    // the rest of your code
}

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

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

关于javascript - 在光标处插入 react ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22410767/

相关文章:

reactjs - React Apollo 客户端查询抛出错误 "Invalid prop ` children` of type `array` supplied to `Query`, expected `function` "

javascript - 如何根据句子索引突出显示句子?

javascript - 使用 jqGrid 进行内联编辑时在表格上方显示表单控件

jquery - 如何使用 jQuery 监听文本区域中的拖放纯文本?

Javascript If..else 语句太长

javascript - FireFox 中的 Sencha ExtJs TextField KeyDown 事件

javascript - 如何使用 JavaScript 删除第一个文本区域上的文本来清除 2 个文本区域?

reactjs - 了解 React 挂载/取消挂载和页面重新加载

javascript - 天气信息

javascript - Braintree 插件,在处理时禁用提交按钮