使用Markdown Editor组件,在状态更新时无法获得Rerender 我正在为Markdown的编辑页面上工作,目前使用Milkdown作为我的图书馆。我已经根据他们的教程写了一个编辑器,没有其他任何内容,它可以按预期工作。什么...

问题描述 投票:0回答:0

用户将点击“编辑”按钮并将其转移到此编辑页面:

import React, { useState , useEffect } from 'react'; import EditorButton from '../../components/Button/EditorButton'; import { fetchCall } from '../../utils/testhandler'; import { setCookieTest } from '../../utils/cookieHandler'; import SaveIcon from '@mui/icons-material/Save'; import { Editor, rootCtx, defaultValueCtx } from '@milkdown/kit/core'; import { nord } from '@milkdown/theme-nord'; import { Milkdown, MilkdownProvider, useEditor } from '@milkdown/react'; import { commonmark } from '@milkdown/kit/preset/commonmark'; import { listener, listenerCtx } from '@milkdown/kit/plugin/listener'; import '@milkdown/theme-nord/style.css' interface EditPageProps { // title: string; content: string; onUpdate: any; } const WikiEditor: React.FC<EditPageProps> = ({ content, onUpdate }) => { let updatedText = ""; useEditor((root) => { return Editor .make() .config(ctx => { ctx.set(rootCtx, root) ctx.set(defaultValueCtx, content) ctx.get(listenerCtx).markdownUpdated((ctx, markdown, prevMarkdown) => { updatedText = markdown; onUpdate(updatedText); console.log(updatedText); }) }) .config(nord) .use(commonmark) .use(listener); }, []); return <Milkdown />; }; export const WikiEditorWrapper: React.FC = () => { const [loading, setLoading] = useState<Boolean>(true) const [loaded, setLoaded] = useState<number>(0); const [body, setBody] = useState<string>(""); const [updates, setUpdates] = useState<string>(""); useEffect(() => { setLoading(true); const getPageContent = async () => { const pageData = await fetchPageToEdit(1) setBody(pageData); // console.log(typeof pageData); } const setFunc = () => { setCookieTest(); }; setLoading(false); getPageContent(); setFunc(); console.log(body); }, []); useEffect(() => { const forceUpdate = () => { return () => setLoaded(loaded => loaded + 1); }; forceUpdate(); }, [body]); const fetchPageToEdit = async (pageID: Number) => { const content = await fetchCall(`pages/${pageID}`); const pageBody = JSON.stringify(content.body); return pageBody; } if(loading) { return ( <section> <p>Loading...</p> </section> ); }; return ( <MilkdownProvider> <EditorButton pageContent={updates} icon={<SaveIcon />} label="Save" link="/wiki/test" /> <WikiEditor content={body} onUpdate={setUpdates} /> </MilkdownProvider> ); };

所有这些主要是概念证明,因为我没有任何实际数据或API调用来测试,因此我将JSON服务器用作Dev后端。当数据更新时,我似乎无法弄清楚如何拥有rerender,以便在编辑器中显示。任何帮助将不胜感激!谢谢

我认为您应该将关键道具添加到

以进行更新。
如果它不起作用,请与我联系以进行更多调查。我需要检查EditUtton组件代码。
    

reactjs typescript state
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.