突变后丢失选择

时间:2016-08-03 16:51:26

标签: reactjs draftjs

我在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
  )
})

是一个hack,我知道我只是在玩DraftJS如果我可以实现这一点,在我使它工作顺利的情况下我绝对会使用Decorator在editorState中添加HTML。

谢谢你的时间!

1 个答案:

答案 0 :(得分:3)

selectionState包含块键(anchorKey& focusKey)。由于您更换了整个块,因此更改了键。您需要做的是从偏移量中找到键并将其设置为新的selectionState,然后再将其应用到新的editorState。

我很有意思,为什么你需要将纯文本转换为html并重新设置。