2016-08-03 7 views
2

Я делаю некоторые хитроумные мутации состояния на editorState, и я теряю выделение.Потеря выбора после мутации

Мне нужно получить currentText(), преобразовать в HTML с помощью некоторой магической библиотеки и преобразовать ее обратно в editorState. Это прекрасно работает, это просто выбор, который так сильно ломается.

Прямо сейчас, я пытаюсь получить выбор в первом начале, а затем сделать forceSelection, но с ошибкой связана с selection.hasFocus() (что кажется, действительно не связано ...).

Я предполагаю, что мне нужно рассчитать «новый» выбор на основе якорей и смещений, но не совсем уверен, какие-либо идеи для этого?

Прямо сейчас мой код выглядит следующим образом:

// onChangeHandler: 

const currentContentState = editorState.getCurrentContent() 
const selectionState = editorState.getSelection() 

const plainHtml = magicOperation(currentContentState.getPlainText()) 

const currentContentBlocks = convertFromHTML(plainHtml) 
const contentState = ContentState.createFromBlockArray(currentContentBlocks) 

const newEditorState = EditorState.createWithContent(contentState) 

this.setState({ 
    editorState: EditorState.forceSelection(
    newEditorState, 
    selectionState 
) 
}) 

хак, я знаю, что я просто играл DraftJS Если я могу добиться того, что, в том случае, когда я заставить его работать гладко, я бы определенно использовать Декоратор для добавления HTML внутри редактора.

Спасибо за ваше время!

ответ

3

selectionState содержит блокирующие ключи (anchorKey & focusKey). Клавиши изменены, потому что вы заменяете целые блоки. Вам нужно найти ключи из смещения и установить его в свой новый элемент выбора, прежде чем применять его к новому редакторуState.

Мне интересно, почему вам нужно преобразовать простой текст в html и установить обратно.

+0

Да, я реализую объекты вместо convertinfFromHTML и все еще нужно рассчитать выбор. Правильно? – davesnx

+0

№. вам нужно установить свойство anchorKey и focusKey объекта выбора. –

+0

и объединить его с выбором? – davesnx