id: quickstart-api-basics
title: API基础
本文档概述了Draft API 的基础。 也可以使用一个工作示例。
受控输入
Editor React组件构建为受控的ContentEditable组件,目的是提供以熟悉的React受控输入API为模型的顶级API。
作为简短的回顾,受控输入涉及两个关键部分:
- 代表输入状态的值
- 一个onChange prop函数,用于接收输入的更新
这种方法允许组成输入的组件对输入的状态进行严格控制,同时仍允许对DOM进行更新以提供有关用户编写的文本的信息。
class MyInput extends React.Component {constructor(props) {super(props);this.state = {value: ''};this.onChange = evt => this.setState({value: evt.target.value});}render() {return <input value={this.state.value} onChange={this.onChange} />;}}
顶层组件可以通过此value状态属性维持对输入状态的控制 。
控制富文本
但是,在React RTF场景中,存在两个明显的问题:
- 纯文本字符串不足以表示富编辑器的复杂状态。
- 没有这样的
onChange事件可用于ContentEditable元素
因此,状态表示为单个不可变的EditorState对象,并且onChange在Editor核心内实现,以将该状态值提供给顶层。
EditorState对象是编辑器状态的完整快照,包括内容,光标和撤消/重做历史。 编辑器中对内容和选择的所有更改将创建新的EditorState对象。 注意,由于跨不可变对象的数据持久性,这仍然有效。
import {Editor, EditorState} from 'draft-js';class MyEditor extends React.Component {constructor(props) {super(props);this.state = {editorState: EditorState.createEmpty()};this.onChange = editorState => this.setState({editorState});}render() {return (<Editor editorState={this.state.editorState} onChange={this.onChange} />);}}
对于编辑器DOM中发生的任何编辑或选择更改,您的onChange处理程序将EditorState根据这些更改对最新对象执行。
