Как преобразовать вывод draft.js в простой HTML-код, используя draft-js-html
Мне нужно около 6 текстовых редакторов для разных полей, чтобы пользователь мог изменять текст как жирный, курсив, подчеркивание, добавлять изображения к нему. Мне нужно отправлять данные в виде обычного HTML в БД и получать данные в том же виде формат. Я использую реагировать-черновик-wysiwyg, для преобразования черновик-js-html. Пожалуйста, помогите мне с этим
import React, { Component } from 'react';
import { Editor } from 'react-draft-wysiwyg';
import 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css';
import draftToHtml from 'draftjs-to-html';
import { EditorState, convertToRaw} from 'draft-js';
class Aboutus extends Component {
constructor(props) {
super(props);
this.state = {
editorStateLabel1: EditorState.createEmpty(),
editorStateLabel2: EditorState.createEmpty(),
aboutus:'',
inProgress: false,
uploadedImages:[],
};
this.onEditorStateChange = this.onEditorStateChange.bind(this);
this.uploadCallback = this.uploadCallback.bind(this);
}
uploadCallback(file){
let uploadedImages = this.state.uploadedImages
const imageObject = {
file: file,
localSrc: URL.createObjectURL(file),
}
uploadedImages.push(imageObject);
this.setState(uploadedImages:uploadedImages)
return new Promise(
(resolve, reject) => {
resolve({ data: { link: imageObject.localSrc } });
}
);
}
onEditorStateChange(type, editorState) {
var aboutus = {};
aboutus[type] =
draftToHtml(convertToRaw(editorState.getCurrentContent()))
this.setState({
aboutus
});
}
render() {
return (
<div>
<h4>label-1</h4>
<Editor
toolbar={{ image: { uploadCallback: this.uploadCallback
}}}
editorState={this.state.aboutus.editorStateLabel1}
onEditorStateChange={this.onEditorStateChange.bind(this,
'editorStateLabel1')}
/>
</Col>
</Row>
<Row>
<Col md={18}>
<h4>label-2</h4>
<Editor
toolbar={{ image: { uploadCallback: this.uploadCallback
}}}
editorState={this.state.aboutus.editorStateLabel2}
onEditorStateChange={this.onEditorStateChange.bind(this,
'editorStateLabel2')}
/>
</Col>
</Row>
</div>
);
}
}
export default Aboutus;
Я получаю сообщение об ошибке типа Uncaught Type Error: editorState.getImmutable не является функцией
1 ответ
Ну при первой загрузке у вас точно будут проблемы, потому что ваши this.state.aboutus
это строка Ты не умеешь читать ''.editorStateLabel1
, Строки не имеют свойств в JavaScript.
При второй загрузке ваш this.state.aboutus.editorStateLabel1
не является действительным editorState, но является строкой HTML. Для работы DraftEditor вам нужно использовать API EditorState. Вы конвертируете в HTML только в последнюю минуту, когда вам нужно отправить в БД. Draft.js имеет свою собственную структуру данных - он не принимает HTML и не выдает HTML. Прочитайте документы здесь: https://draftjs.org/docs/api-reference-content-state