转换纯文本
富文本转纯文本
以下是如何使用 @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
字段,子节点将被递归转换为纯文本 - 如果两者都没有,节点将被忽略
- 段落、文本和制表符节点会插入换行符/制表符