You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用react-codemirror2 Controlled组件出现双编辑器且输入同步问题

解决react-codemirror2显示重复编辑器并同步的问题

以下是几种可能的原因和对应的解决办法:

  • 样式重复引入或冲突
    检查项目中是否重复引入了Codemirror的CSS文件(比如全局样式或其他组件里又加了codemirror/lib/codemirror.css),重复的样式可能让单个编辑器看起来像两个。确保核心CSS和主题CSS只在项目中引入一次。

  • 组件被重复调用
    虽然你的代码里只写了一次<REditor>,但父组件或路由可能重复渲染了<CreatePolicy>组件。可以在CreatePolicy里加一行console.log('CreatePolicy rendered'),看控制台是否多次打印,判断是否存在重复挂载的情况。如果是,检查父组件代码和路由配置,确保该组件只被渲染一次。

  • 版本兼容性问题
    部分版本的react-codemirror2和当前React版本不兼容,可能导致内部重复生成编辑器实例。可以尝试升级或降级react-codemirror2到稳定版本(比如4.3.0),同时确认React版本与之匹配。

  • 模式引入与配置不匹配
    你代码里引入的是JavaScript模式的文件,但编辑器配置的mode: "css",这种不匹配可能引发渲染异常。把模式引入改成对应的CSS模式:

    import "codemirror/mode/css/css";
    

    或者将options里的mode改为"javascript",保持引入和配置一致。

修改后的示例代码:

import "codemirror/lib/codemirror.css";
import "codemirror/theme/eclipse.css";
import "codemirror/mode/css/css";
import { Controlled as REditor } from "react-codemirror2";
import { useState } from "react";

const CreatePolicy = () => {
    const [value, setValue] = useState<string>("");
    
    // 检查组件是否重复渲染
    console.log('CreatePolicy rendered');

    return (
    <div className="create-policy-container">
         <REditor
            className="code-mirror-wrapper"
            onBeforeChange={(editor, data, value) => {
               setValue(value);
             }}
            value={value}
            options={{
            lineWrapping: true,
            lint: true,
            mode: "css",
            theme: "eclipse",
            lineNumbers: true,
           }}
         />
    </div>
  );
};

export default CreatePolicy;

内容的提问来源于stack exchange,提问作者Veera Silamban

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 07:45:32