Draft-js получает упоминание позиции в editorState currentContent

Я использую draft-js-упоминание-плагин, и я ищу метод, который возвращает позицию упоминания во всем тексте (без использования indexOf()).

Например, я хочу получить начальную и конечную позиции piRstone в этом предложении:Welcome to piRstone, our new colleague.

Я должен получить 11 для начальной позиции и 19 для финала.

<div className="editor">
    <Editor
        editorState={this.state.editorState}
        onChange={this.onEditorChange}
        plugins={plugins}
        // placeholder={this.state.placeholder}
        ref={(element) => { this.editor = element; }}
    />
    <MentionSuggestions
        onSearchChange={this.onSearchChange}
        suggestions={this.state.suggestions}
        onAddMention={this.onAddMention}
    />
</div>

Вот мой onAddMention() метод:

onAddMention(object) {
    console.log(object);
}

Может быть, есть более простой метод для работы, но упомянутый плагин немного слабоват.

2 ответа

Вы получите смещение и длину конкретного упоминания в объекте entityRanges блока, смещение будет начальным индексом, а смещение + длина вашего упоминания будет последним индексом

[
  {
    "key": "4p8mh",
    "text": "Nice to meet you #name#",
    "type": "unstyled",
    "depth": 0,
    "inlineStyleRanges": [],
    "entityRanges": [
      {
        "offset": 20,
        "length": 6,
        "key": 0
      }
    ],
    "data": {}
  }
]

Выполняя итерацию по этому объекту, вы получите смещение и длину

Object.keys(content.blocks).map(i => {
         const {entityRanges, text} = content.blocks[i];
         entityRanges.map((range, idx) => {
              console.log(range.offset)
              console.log(range.length)
         });
    });

В 2022 году вы сможете запускать их в своем коде, чтобы получать упоминания позиций из editorState.

       const rawContentState = convertToRaw(editorState.getCurrentContent());
  console.log(rawContentState) <---- this is an object with a key called blocks and key called entityMap. blocks has an entityRanges object with start and end points ;))

Другие вопросы по тегам