我有这个必须抽象draft-js
编辑器的反应组件。我的 redux 商店将有这个description
必须是常规 HTML 字符串的字段。编辑器应该能够获取value
HTML 字符串并将其解析为自己的内部内容(draftjs 内容)。更改内容时,它应该onChange
使用最终的 HTML 内容触发 prop。换句话说,这个组件内部发生的事情应该对外界透明。
现在,我的组件如下所示:
import PropTypes from 'prop-types'
import React, { Component } from 'react'
import { Editor, EditorState, ContentState, convertFromHTML } from 'draft-js'
import { stateToHTML } from 'draft-js-export-html'
export const getStateFromHTML = (html) => {
const blocksFromHTML = html && convertFromHTML(html)
if (blocksFromHTML) {
const state = ContentState.createFromBlockArray(
blocksFromHTML.contentBlocks,
blocksFromHTML.entityMap,
)
return EditorState.createWithContent(state)
}
return EditorState.createEmpty()
}
export default class WYSIWYG extends Component {
static propTypes = {
value: PropTypes.string,
onChange: PropTypes.func,
}
static defaultProps = {
value: '',
onChange: Function.prototype,
}
state = { editorState: null }
componentWillMount() {
this.setEditorState(this.props.value)
}
componentWillReceiveProps({ value }) {
this.setEditorState(value)
}
onChange = (editorState) => {
this.setState({ editorState })
const rawData = stateToHTML(editorState.getCurrentContent())
this.props.onChange(rawData)
}
setEditorState(value) {
this.setState({ editorState: getStateFromHTML(value) })
}
render() {
return (
<Editor
editorState={this.state.editorState}
onChange={this.onChange}
/>
)
}
}
由于某种原因,这不起作用。似乎getCurrentContent
在状态实际更新之前被调用。我实在想不通。
我对处理这种情况的任何[新]方法持开放态度;我只需要能够发送一个 HTML 值并输出一个 HTML 值。我也接受可以完成这项工作的其他所见即所得插件的迹象。