У меня есть приложение, которое требует нескольких текстовых входов, а для форматирования и настройки я выбрал draft-js
в качестве моего редактора, однако я столкнулся с очень запутанной проблемой ввода.Редакторы Draft-js, вызывающие обратный вход
Когда я печатаю в редакторах, моя последняя нажатая клавиша печатается в начале редактора, меняя весь мой вход, как будто карет всегда находится в первом указателе строки.
У меня есть 3 редактора, каждый из которых имеет onChange, который обновляет хранилище redux с действующими редакторами contentState
. Когда страница повторно отображается, каждый редактор затем отображается с их соответствующими 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
, объединение двух и повторное рендеринг, но это только приводит к больше проблем и ошибок.