Data Conversion

Because a text editor doesn't exist in a vacuum and it's important to save contents for storage or transmission, you will want to be able to convert a ContentState into raw JS, and vice versa.

To that end, we provide a couple of utility functions that allow you to perform these conversions.

Note that the Draft library does not currently provide utilities to convert to and from markdown or markup, since different clients may have different requirements for these formats. We instead provide JavaScript objects that can be converted to other formats as needed.

The Flow type RawDraftContentState denotes the expected structure of the raw format of the contents. The raw state contains a list of content blocks, as well as a map of all relevant entity objects.

Functions #

convertFromRaw #

convertFromRaw(rawState: RawDraftContentState): ContentState

Given a raw state, convert it to a ContentState. This is useful when restoring contents to use within a Draft editor.

convertToRaw #

convertToRaw(contentState: ContentState): RawDraftContentState

Given a ContentState object, convert it to a raw JS structure. This is useful when saving an editor state for storage, conversion to other formats, or other usage within an application.

convertFromHTML #

const sampleMarkup =
  '<b>Bold text</b>, <i>Italic text</i><br/ ><br />' +
  '<a href="">Example link</a>';

const blocksFromHTML = convertFromHTML(sampleMarkup);
const state = ContentState.createFromBlockArray(

this.state = {
  editorState: EditorState.createWithContent(state),

Given an HTML fragment, convert it to an object with two keys; one holding the array of ContentBlock objects, and the other holding a reference to the entityMap. Construct content state from the array of block elements and the entityMap, and then update the editor state with it. Full example available here.