我第一次尝试为自己写博客,我一直在使用词汇(facebook/lexical:https://github.com/facebook/lexical)在面板中构建了一个富文本编辑器,运行得很好,我可以将文本和节点正确地存储到数据库中,但是现在我不知道如何在前端正确地显示它们。我不确定是否应该在只读模式下使用同一个编辑器来编辑带格式的富文本?或者我需要将它们转换为HTML节点进行渲染吗?
有代码沙盒链接:https://codesandbox.io/s/ecstatic-sanderson-74ezz4?file=/src/App.tsx
xport const MyEditor = (props: any) => {
const init = () => {
return props.content
}
const ct = init()
console.log(props.content)
const initConfig = {
namespace: 'MyEditor',
theme:EditorTheme,
onError(error: any) {
throw error;
},
editorState: ct,
\\I guess this switch used for rendering text
editable: false,
nodes: [
HeadingNode,
ListNode,
ListItemNode,
QuoteNode,
CodeNode,
CodeHighlightNode,
TableNode,
TableCellNode,
TableRowNode,
AutoLinkNode,
LinkNode
],
}
return (
<>
<LexicalComposer initialConfig={initConfig}>
<RichTextPlugin contentEditable={<ContentEditable />}
placeholder={<div>Loading</div>}
ErrorBoundary={LexicalErrorBoundary} />
<HistoryPlugin />
<AutoFocusPlugin />
<CodeHighlightPlugin />
<ListPlugin />
<LinkPlugin />
<AutoLinkPlugin />
<ListMaxIndentLevelPlugin maxDepth={7} />
<MarkdownShortcutPlugin transformers={TRANSFORMERS} />
</LexicalComposer>
</>
);
}
1条答案
按热度按时间dtcbnfnu1#
是的,我们推荐的方法是使用一个LexicalEditor示例,并将“editable”配置选项设置为false,这样Lexical就可以像在可编辑模式下一样处理从JSON到HTML的呈现,从而省去了编写一个单独的呈现器将Lexical JSON转换为HTML的麻烦。
在一些高级用例中,您可能希望在读取模式下更改内容的视觉外观。在这种情况下,此解决方案可能不太适合您,但您可以使用$generateHtmlFromNodes或编写自己的呈现逻辑。