From 4ad85529256b34562b5d80205f4c45a8cef8c667 Mon Sep 17 00:00:00 2001 From: fantasticit Date: Fri, 17 Jun 2022 18:51:01 +0800 Subject: [PATCH] client: usememo for get ydoc instance --- .../components/wiki/setting/import/editor.tsx | 24 +++++++------------ 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/packages/client/src/components/wiki/setting/import/editor.tsx b/packages/client/src/components/wiki/setting/import/editor.tsx index 9d7ebddc..01454ea0 100644 --- a/packages/client/src/components/wiki/setting/import/editor.tsx +++ b/packages/client/src/components/wiki/setting/import/editor.tsx @@ -1,6 +1,6 @@ import { Toast } from '@douyinfe/semi-ui'; import { safeJSONStringify } from 'helpers/json'; -import { useEffect, useRef } from 'react'; +import { useEffect, useMemo, useRef } from 'react'; import { useEditor } from 'tiptap/core'; import { AllExtensions } from 'tiptap/core/all-kit'; import { Collaboration } from 'tiptap/core/extensions/collaboration'; @@ -8,25 +8,16 @@ import { prosemirrorJSONToYDoc } from 'tiptap/core/thritypart/y-prosemirror/y-pr import { markdownToProsemirror } from 'tiptap/markdown/markdown-to-prosemirror'; import * as Y from 'yjs'; -let ydoc = null; - -const getYdoc = () => { - if (!ydoc) { - ydoc = new Y.Doc(); - } - return ydoc; -}; - export const ImportEditor = ({ content, onChange }) => { const parsed = useRef(false); - + const ydoc = useMemo(() => new Y.Doc(), []); const editor = useEditor( { editable: false, - extensions: AllExtensions.concat(Collaboration.configure({ document: getYdoc() })), + extensions: AllExtensions.concat(Collaboration.configure({ document: ydoc })), content: '', }, - [] + [ydoc] ); useEffect(() => { @@ -37,8 +28,8 @@ export const ImportEditor = ({ content, onChange }) => { const title = prosemirrorNode.content[0].content[0].text; editor.commands.setContent(prosemirrorNode); - Y.applyUpdate(getYdoc(), Y.encodeStateAsUpdate(prosemirrorJSONToYDoc(editor.schema, prosemirrorNode))); - const state = Y.encodeStateAsUpdate(getYdoc()); + Y.applyUpdate(ydoc, Y.encodeStateAsUpdate(prosemirrorJSONToYDoc(editor.schema, prosemirrorNode))); + const state = Y.encodeStateAsUpdate(ydoc); onChange({ title, @@ -52,9 +43,10 @@ export const ImportEditor = ({ content, onChange }) => { } return () => { + ydoc.destroy(); editor.destroy(); }; - }, [editor, content, onChange]); + }, [editor, ydoc, content, onChange]); return null; };