Markdown编辑器内容无法实时预览怎么办?
我用React写了个简单的Markdown编辑器,输入框的内容变了,但预览区完全没反应,是不是状态没绑对?
试过用useState存markdown字符串,也加了onChange监听,可右边的预览就是不动。控制台也没报错,就是不更新。
import React, { useState } from 'react';
import ReactMarkdown from 'react-markdown';
function MarkdownEditor() {
const [content, setContent] = useState('# Hello');
return (
<div>
<textarea value={content} onChange={e => setContent(e.target.value)} />
<ReactMarkdown>{content}</ReactMarkdown>
</div>
);
}
ReactMarkdown组件的用法上。通用的做法是要把 markdown 内容通过children属性传进去,而不是直接写在里面。试试这样改:
改成这样:
另外再检查下
ReactMarkdown的版本,有时候新旧版本的 API 变动也会导致这种问题。我之前也遇到过类似情况,折腾了半天才发现是版本的问题,真是让人头大。记得装完依赖后最好清一下缓存再试试。首先你要确认的是,
ReactMarkdown组件的用法是否正确。ReactMarkdown是一个解析 markdown 文本并将其转换为 React 元素的库,它的子元素应该是 markdown 字符串,而不是用花括号包裹的 JSX 表达式。你现在的写法是正确的,但为了确保没有其他问题,我们可以先简化一下代码,看看是否能正常工作。然后你要检查的是,
textarea的value和onChange是否正确绑定到了content状态。从你提供的代码看,这部分应该没问题。接下来,我们要确保
ReactMarkdown组件在content变化时能够重新渲染。通常情况下,只要content发生变化,React 的虚拟 DOM 机制会自动触发组件的重新渲染。但是有时候,可能是由于某些原因导致渲染没有按预期进行。我们可以尝试强制
ReactMarkdown重新渲染,通过给它一个唯一的 key 值,这样当key值发生变化时,React 会认为这是一个新的组件,从而重新渲染它。我们来修改一下代码:
在这个修改后的代码里,我们给
ReactMarkdown组件添加了一个key属性,这个key的值就是content。每当content发生变化时,key的值也会变化,这会告诉 React 需要重新创建一个新的ReactMarkdown组件,从而达到重新渲染的效果。希望这个方法能解决你的问题。如果还有其他问题或者没有解决问题的话,可以再检查一下是否有其他地方影响了组件的渲染。有时候浏览器缓存或者开发工具的设置也会导致一些奇怪的问题,可以尝试清除缓存或者重启开发服务器。