我在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。
谢谢你的时间!
答案 0 :(得分:3)
selectionState包含块键(anchorKey& focusKey)。由于您更换了整个块,因此更改了键。您需要做的是从偏移量中找到键并将其设置为新的selectionState,然后再将其应用到新的editorState。
我很有意思,为什么你需要将纯文本转换为html并重新设置。