Draft-jsは、Reactでリッチテキストエディタを構築するためのフレームワークです。しかし、初期設定時に「Uncaught TypeError: Cannot read property ‘getIn’ of undefined」というエラーが発生することがあります。この記事では、そのエラーの対策方法を詳しく解説します。
エラーが発生する原因
以下のコードを見てみましょう。
import React, { useEffect, useState } from 'react';
import { Editor, EditorState } from 'draft-js';
import 'draft-js/dist/Draft.css';
function MyEditor() {
const [editorState, setEditorState] = useState(EditorState.createEmpty());
return (
<div className="editor">
<Editor editorState={editorState} onChange={setEditorState} />
</div>
);
}
export default MyEditor;
このエラーの原因は、コンポーネントのレンダリングが完了する前に Editor
コンポーネントが editorState
を必要とするためです。Reactのレンダリングサイクルと useState
の非同期的な特性により、初期レンダリング時には editorState
が未定義になる可能性があります。
解決策
解決策としては、editorState
が定義されているかどうかをチェックしてから Editor
コンポーネントをレンダリングすることです。また、useState
での初期化ではなく、useEffect
フック内で EditorState.createEmpty()
を呼び出す方法が推奨されます。これにより、コンポーネントのマウント後に状態が設定され、エラーを防ぐことができます。
以下は修正後のコードです。
import React, { useEffect, useState } from 'react';
import { Editor, EditorState } from 'draft-js';
import 'draft-js/dist/Draft.css';
function MyEditor() {
const [editorState, setEditorState] = useState<EditorState>();
useEffect(() => {
setEditorState(EditorState.createEmpty());
}, []);
return (
<div className="editor">
{editorState && (
<Editor editorState={editorState} onChange={setEditorState} />
)}
</div>
);
}
export default MyEditor;
まとめ
EditorState.createEmpty()
を非同期に設定することで、エラーを回避しつつ、Draft-jsを安全に使用できます。
0 件のコメント:
コメントを投稿