draft-js README

The project's README from github.com/facebookarchive/draft-js. As one markdown file: README.md.

draftjs-logo

Draft.js

Build Status npm version

Live Demo


Status

THIS PROJECT IS CURRENTLY IN MAINTENANCE MODE. It will not receive any feature updates, only critical security bug patches. On 31st December 2022 the repo will be fully archived.

For users looking for an open source alternative, Meta have been working on migrating to a new framework, called Lexical. It's still experimental, and we're working on adding migration guides, but, we believe, it provides a more performant and accessible alternative.


Draft.js is a JavaScript rich text editor framework, built for React and backed by an immutable model.

Learn how to use Draft.js in your own project.

Draft.js is used in production on Facebook, including status and comment inputs, Notes, and messenger.com.

API Notice

Before getting started, please be aware that we recently changed the API of Entity storage in Draft.

Previously, the old API was set to be removed in v0.11.0. Since, the plans have changed— v0.11.0 still supports the old API and v0.12.0 will remove it. Refer to the docs for more information and information on how to migrate.

Getting Started

npm install --save draft-js react react-dom

or

yarn add draft-js react react-dom

Draft.js depends on React and React DOM which must also be installed.

Using Draft.js

import React from 'react';
import ReactDOM from 'react-dom';
import {Editor, EditorState} from 'draft-js';

function MyEditor() {

  
  constructor(props) {
    super(props);
    this.state = {editorState: EditorState.createEmpty()};
    this.onChange = (editorState) => this.setState({editorState});
    this.setEditor = (editor) => {
      this.editor = editor;
    };
    this.focusEditor = () => {
      if (this.editor) {
        this.editor.focus();
      }
    };
  }

  componentDidMount() {
    this.focusEditor();
  }

  render() {
    return (
      <div style={styles.editor} onClick={this.focusEditor}>
        <Editor
          ref={this.setEditor}
          editorState={this.state.editorState}
          onChange={this.onChange}
        />
      </div>
    );
  }
}

const styles = {
  editor: {
    border: '1px solid gray',
    minHeight: '6em'
  }
};

ReactDOM.render(
  <MyEditor />,
  document.getElementById('container')
);

Since the release of React 16.8, you can use Hooks as a way to work with EditorState without using a class.

import React from "react";
import { Editor, EditorState } from "draft-js";
import "draft-js/dist/Draft.css";

export default function MyEditor() {
  const [editorState, setEditorState] = React.useState(() =>
    EditorState.createEmpty()
  );

  const editor = React.useRef(null);
  function focusEditor() {
    editor.current.focus();
  }

  return (
    <div
      style={{ border: "1px solid black", minHeight: "6em", cursor: "text" }}
      onClick={focusEditor}
    >
      <Editor
        ref={editor}
        editorState={editorState}
        onChange={setEditorState}
        placeholder="Write something!"
      />
    </div>
  );
}

Note that the editor itself is only as tall as its contents. In order to give users a visual cue, we recommend setting a border and a minimum height via the .DraftEditor-root CSS selector, or using a wrapper div like in the above example.

Because Draft.js supports unicode, you must have the following meta tag in the <head> </head> block of your HTML file:

<meta charset="utf-8" />

Further examples of how Draft.js can be used are provided in the /examples directory of this repo.

Building Draft.js

Draft.js is built with Yarn v1. Using other package managers mgiht work, but is not officially supported.

To clone and build, run:

git clone https://github.com/facebook/draft-js.git
cd draft-js
yarn install
yarn run build

Examples

To run the examples in the /examples directory, first build Draft.js locally as described above. Then, open the example HTML files in your browser.

Browser Support

IE / Edge
IE / Edge
Firefox
Firefox
Chrome
Chrome
Safari
Safari
iOS Safari
iOS Safari
Chrome for Android
Chrome for Android
IE11, Edge [1, 2] last 2 versions last 2 versions last 2 versions not fully supported [3] not fully supported [3]

[1] May need a shim or a polyfill for some syntax used in Draft.js (docs).

[2] IME inputs have known issues in these browsers, especially Korean (docs).

[3] There are known issues with mobile browsers, especially on Android (docs).

Resources and Ecosystem

Check out this curated list of articles and open-sourced projects/utilities: Awesome Draft-JS.

Discussion and Support

Join our Slack team!

Contribute

We welcome pull requests. Learn how to contribute.

License

Draft.js is MIT licensed.

Examples provided in this repository and in the documentation are separately licensed.

draft-js (facebookarchive/draft-js)

Searching Database…

22.6K ·GitHub
archived
Что это такое?Это фреймворк для создания редакторов форматированного текста, построенный для React и основанный на неизменяемой модели данных — то есть способ встроить редактирование форматированного текста в веб-приложения.
То есть это не готовый редактор, который можно просто вставить в приложение?Верно — это фреймворк, а не готовый компонент. Из его строительных блоков вы собираете собственные редакторы: от простого оформления текста до встроенных медиафайлов.
Как добавить его в свой React-проект?Установите его вместе с React: npm install draft-js react react-dom — Draft.js нужны и React, и React DOM. Начиная с React 16.8, можно управлять EditorState через Hooks вместо классового компонента.
Проект ещё поддерживается? Стоит ли выбирать его для нового проекта?Нет — он находится в режиме поддержки: получают только критические исправления безопасности, а репозиторий полностью заархивирован 31 декабря 2022 года. Для новых проектов Meta предлагает его преемника — фреймворк Lexical.
Какие браузеры он поддерживает?IE11 и Edge (может понадобиться polyfill, а с вводом через IME есть известные проблемы, особенно с корейским), а также две последние версии Firefox, Chrome и Safari. Мобильные устройства поддерживаются не полностью, особенно на Android.
Где Draft.js используется в продакшене?В Facebook: поля статусов и комментариев, Notes и messenger.com были построены на нём.
Почему состояние редактора неизменяемое?Модель построена на immutable-js, поэтому обновления состояния выполняются в функциональном стиле, а данные сохраняются очень активно — это позволяет держать потребление памяти под контролем даже для длинных документов и больших историй отмены.
Что такое Lexical — фреймворк, который Meta советует вместо него?Это более новый фреймворк от Meta для текстовых редакторов в вебе. На момент архивации Draft.js он ещё был экспериментальным, но Meta считала его более производительным и доступным и уже работала над руководствами по миграции.
Редактор выглядит сплющенным — как его правильно стилизовать?Он по высоте равен своему содержимому, поэтому задайте селектору .DraftEditor-root рамку и min-height либо оберните его в div. Также в HTML нужен meta-тег с указанием unicode-кодировки, потому что Draft.js поддерживает unicode.
Size
36 MB
Stars
22.6K
Age
10y
Commits · 90 Days