Draft-js编辑器导致反向输入
Draft-js editors causing reversed input
我有一个需要多个文本输入的应用程序,为了格式化和自定义,我选择了draft-js
作为我的编辑器,但是我遇到了一个非常令人困惑的输入问题。
当我在编辑器中输入时,我最近按下的键被打印在编辑器的开头,颠倒了我的整个输入,就好像插入符号总是在该行的第一个索引处。
我有3个编辑器,每个编辑器都有一个onChange,它用编辑器当前的contentState
更新一个redux存储。当页面被重新渲染时,每个编辑器的contentState
被转换成EditorState
。
main.js
render() {
/* Each Editor has a similar block as below */
let coverEditorState = EditorState.createEmpty()
let coverContentState = _.get(data, 'details.message.cover.contentState')
if (typeof coverContentHTML != "undefined"){
coverEditorState = EditorState.createWithContent(coverContentState)
}
return (
...
<Composer
editorState={coverEditorState}
onChange={this._handleCoveringLetterChange.bind(this)}
/>
...
)
}
Composer.js
class Composer extends Component {
constructor() {
super()
this.state = { editorState: EditorState.createEmpty(), styleMap: {} }
}
componentWillReceiveProps( nextProps ) {
this.setState({ editorState: nextProps.editorState })
}
onChange( editorState ) {
let nextState = Object.assign({}, this.state, { editorState })
let currentContentState = editorState.getCurrentContent()
let changeObject = {
contentState: currentContentState
}
this.setState(nextState)
this.props.onChange(changeObject)
}
render() {
return (
<Editor
editorState={this.state.editorState}
onChange={this.onChange.bind(this)}
/>
)
}
}
我已经尝试返回SelectionState
以及ContentState
,结合两者,并重新渲染,但这只会导致更多的问题和错误。
我刚刚碰到(并解决了)一个类似的问题。
如果你和我有同样的问题,那是因为对setState
的调用实际上排队更新状态,并且在调用this.props.onChange
之前没有应用它。可以理解的是,这似乎让draft.js
失去了正常。
尝试改变:
this.setState(nextState)
this.props.onChange(changeObject)
:
this.setState(nextState, () => {
this.props.onChange(changeObject);
});
这将确保在调用父onChange
回调之前更新状态。
我无法真正看到您提供的代码,但听起来您的问题是您在每次更改上重新创建EditorState(使用EditorState.createEmpty()
或EditorState.createWithContetnt()
)。这不起作用,因为它只恢复内容-而不是光标位置,选择等。
EditorState
,即如果它不存在。然后,在每次更改时,我通常更新EditorState
和,同时将contentState
保存到(在我们的示例中)数据库中。这里重要的是,您不能使用contentState
来创建新的EditorState
。所以下次EditorState
不存在时,使用EditorState.createWithContent(contentStateFromDB)
初始化它
相关文章:
- Kendo ui Grid:标准的HTML5输入日期时间可以用作单元格编辑器吗
- 使用 strip_tags() 和 preg_replace() 显示所见即所得/TinyMCE 文本编辑器中输入的文本
- TinyMCE编辑器在弹出对话框中失去了输入框的焦点
- 如何在两个Liferay输入编辑器之间传输html
- 如何使用javascript在文本区域中获取Html编辑器的输入
- 使用TinyMCE编辑器的javascript对文本区域中的输入进行编码
- 为什么CodeMirror编辑器的输入值可以'无法保存到数据库中
- 如何验证在tinymce(gem)编辑器rails应用程序中输入的字符数
- 如何使用Jquery验证引擎来验证CLEditor(html编辑器)输入
- 输入键在froala编辑器上不起作用
- Html /javascript编辑器,显示您输入的结果
- JavaScript -代码编辑器在必要时跳过输入的更好方法是什么?
- 如何在我的图像编辑器中设置输入高度和宽度的画布大小
- 如何使用 ace 编辑器动态触发自动完成:输入命令和完成选项
- Draft-js编辑器导致反向输入
- 王牌编辑器:一切工作,除了能够在编辑器中输入文本
- 如何在编辑器对话框输入元素中添加自动完成选项
- SO标签编辑器计算输入宽度
- 我'我试图通过使用codemmirror编辑器构建D3.js,但我在那里输入的任何东西都不能被D3.js正确地可
- 如何防止Ace编辑器在输入时自动完成?