转换纯文本

富文本转纯文本

以下是如何使用 @payloadcms/richtext-lexical/plaintext 将富文本数据转换为纯文本的方法。

import type { SerializedEditorState } from '@payloadcms/richtext-lexical/lexical'

import { convertLexicalToPlaintext } from '@payloadcms/richtext-lexical/plaintext'

// 你的富文本数据在这里
const data: SerializedEditorState = {}

const plaintext = convertLexicalToPlaintext({ data })

自定义转换器

convertLexicalToPlaintext 函数接受一个 converters 对象,允许你自定义特定节点如何转换为纯文本。

import type {
  DefaultNodeTypes,
  SerializedBlockNode,
} from '@payloadcms/richtext-lexical'
import type { SerializedEditorState } from '@payloadcms/richtext-lexical/lexical'
import type { MyTextBlock } from '@/payload-types'

import {
  convertLexicalToPlaintext,
  type PlaintextConverters,
} from '@payloadcms/richtext-lexical/plaintext'

// 你的富文本数据在这里
const data: SerializedEditorState = {}

const converters: PlaintextConverters<
  DefaultNodeTypes | SerializedBlockNode<MyTextBlock>
> = {
  blocks: {
    textBlock: ({ node }) => {
      return node.fields.text ?? ''
    },
  },
  link: ({ node }) => {
    return node.fields.url ?? ''
  },
}

const plaintext = convertLexicalToPlaintext({
  converters,
  data,
})

与其他转换器不同,纯文本转换没有默认的转换器。

如果节点没有定义转换器,将使用以下启发式方法将其转换为纯文本:

  • 如果节点有 text 字段,将使用该字段作为纯文本
  • 如果节点有 children 字段,子节点将被递归转换为纯文本
  • 如果两者都没有,节点将被忽略
  • 段落、文本和制表符节点会插入换行符/制表符