安装 Slate

Slate 是以 NPM 模块的方式发布的 monorepo,因此你可以这样安装它:

npm install slate slate-react

同时,你也需要确保 React 已作为 Slate 的 peer dependencies 正确安装:

npm install react react-dom immutable

注意,如果你需要使用 Slate 的预构建版本,你可以在执行 npm install slate 后获取打包后的 dist/slate.js 文件!查阅使用构建后源码指南以了解更多相关信息。

在完成安装 Slate 后,你需要导入它。

Slate 开放了一套用于构建编辑器的模块。其中,最重要的是 Editor 组件。

// 导入 Slate Editor
import { Editor } from 'slate-react'

在渲染编辑器的基础上,你还需要给 Slate 一个【初始状态】以作为内容渲染。我们将使用 Slate 附带的 State 模型来创建一个仅包含单个段落下若干文本的全新初始状态:

// 导入 `State` 模型。
import { Editor } from 'slate-react'
import { State } from 'slate'

// 构建初始状态…
const initialState = State.fromJSON({
  document: {
    nodes: [
      {
        kind: 'block',
        type: 'paragraph',
        nodes: [
          {
            kind: 'text',
            ranges: [
              {
                text: 'A line of text in a paragraph.'
              }
            ]
          }
        ]
      }
    ]
  }
})

既然我们已经获得了初始状态,我们就可以定义我们的 App 并将其传入 Slate 的 Editor 组件了。像这样:

// 导入 React!
import React from 'react'
import { Editor } from 'slate-react'
import { State } from 'slate'

const initialState = State.fromJSON({
  document: {
    nodes: [
      {
        kind: 'block',
        type: 'paragraph',
        nodes: [
          {
            kind: 'text',
            ranges: [
              {
                text: 'A line of text in a paragraph.'
              }
            ]
          }
        ]
      }
    ]
  }
})

// 定义我们的应用…
class App extends React.Component {

  // 设置应用创建时的初始状态。
  state = {
    state: initialState
  }

  // 发生变更时,使用新的编辑器状态更新应用的 React 状态。
  onChange = ({ state }) => {
    this.setState({ state })
  }

  // 渲染编辑器。
  render() {
    return (
      <Editor
        state={this.state.state}
        onChange={this.onChange}
      />
    )
  }

}

你会发现传入 Editor 组件的 onChange 回调更新了应用的状态。这样,当编辑器重绘时,新的状态就会通过你的 change 反映出来了。

就是这样!

这是 Slate 最基础的示例了。如果你将上述示例渲染到页面上,你应该会看到一个写着 A line of text in a paragraph. 文本的段落。当你输入时,文本应当就能变更了!


Next:
添加事件回调


results matching ""

    No results matching ""