Draft.js を使用してテキスト エディターを実装しています。エディターのコンテンツを DB に保存し、後でそれを取得して、エディター ページに再度アクセスするときなどに、エディターに再度挿入したいと考えています。
まず、これらは関連するインポートです
import { ContentState, EditorState, convertToRaw, convertFromRaw } from 'draft-js';
DB にデータを保存する方法 (親コンポーネントにあります)
saveBlogPostToStore(blogPost) {
const JSBlogPost = { ...blogPost, content: convertToRaw(blogPost.content.getCurrentContent())};
this.props.dispatch(blogActions.saveBlogPostToStore(JSBlogPost));
}
DB を確認すると、次のオブジェクトが表示されます。
[{"_id":null,"url":"2016-8-17-sample-title","title":"Sample Title","date":"2016-09-17T14:57:54.649Z","content":{"blocks":[{"key":"4ads4","text":"Sample Text Block","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[]}]},"author":"Lukas Gisder-Dubé","__v":0,"tags":[]}]
これまでのところ、私は他のことを試してみましたが、データベース内のオブジェクトは確実に変換されました。たとえば、convertToRaw() メソッドを呼び出さずにコンテンツを保存すると、さらに多くのフィールドがあります。
データを新しい EditorState として設定する
DB から Data を取得して EditorState として設定するために、私もいろいろ試しました。以下は私の最良の推測です:
constructor(props) {
super(props);
const DBEditorState = this.props.blogPost.content;
console.log(DBEditorState); // logs the same Object as above
this.state = { ...this.props.blogPost, content: EditorState.createWithContent(
convertFromRaw(DBEditorState)
)};
}
コンポーネントをレンダリングすると、次のエラーが発生します。
convertFromRawToDraftState.js:38 Uncaught TypeError: Cannot convert undefined or null to object
どんな助けでも大歓迎です!