insert at cursor in react

前端 未结 2 675
日久生厌
日久生厌 2021-01-13 03:26

I need to insert text at caret (current cursor position) in the React-controlled textarea (like autocomplete).

For vanilla textarea I used this code:



        
相关标签:
2条回答
  • 2021-01-13 04:12

    You need to get the node, by doing this.getDOMNode(). Depending on the rest of your code, you might need to find the textarea within that node; or refactor your textarea into its own component and use refs.

    insertAtCursor: function (myField, myValue) {
        var myField = this.getDOMNode();
    
        // the rest of your code
    }
    

    A nicer alternative is to just determine the cursor position, and insert your new string; and store it back in your state. This is what I'd recommend.

    var index = getCursorPosition();
    this.setState({
      value: this.state.value.slice(0, index) + theNewString + this.state.value.slice(index + 1)
    })
    
    0 讨论(0)
  • 2021-01-13 04:24

    In React 15.6.1 best option is something like that:

    class CursorForm extends Component {
    
      constructor(props) {
        super(props);
        this.state = {value: ''};
      }
    
      handleChange = event => {
        // Custom set cursor on zero text position in input text field
        event.target.selectionStart = 0 
        event.target.selectionEnd = 0
    
        this.setState({value: event.target.value})
      }
    
      render () {
        return (
          <form>
            <input type="text" value={this.state.value} onChange={this.handleChange} />
          </form>
        )  
      }
    
    }
    

    You can get full control of cursor position by event.target.selectionStart and event.target.selectionEnd values without any access to real DOM tree.

    0 讨论(0)
提交回复
热议问题