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

Next.js中@uiw/react-md-editor输入时失焦问题排查与解决

解决Next.js中@uiw/react-md-editor输入时丢失焦点的问题

问题原因

你遇到的焦点丢失问题,核心原因是将动态导入的MDEditor组件定义在了MdEditor函数组件的内部。每次MdEditor组件因状态更新(比如输入字符触发setMd)发生重渲染时,都会重新执行动态导入的逻辑,生成一个全新的MDEditor组件实例。React会把这个新实例判定为完全不同的组件,进而卸载旧组件并挂载新组件,直接导致编辑器焦点丢失。

解决方案

把动态导入的代码移到MdEditor组件外部,确保MDEditor只被初始化一次,不会随组件重渲染而重复创建:

修改后的Component/MdEditor代码:

import React, { useState } from "react";
import "@uiw/react-md-editor/markdown-editor.css";
import "@uiw/react-markdown-preview/markdown.css";
import dynamic from "next/dynamic";

// 将动态导入移至组件外部,保证只执行一次
const MDEditor = dynamic(() => import("@uiw/react-md-editor"), {
  ssr: false,
});

const MdEditor = () => {
  const [md, setMd] = useState<string | undefined>("# Hello World");

  return <MDEditor value={md} onChange={setMd} />;
};

export default MdEditor;

额外优化(可选)

如果父组件(即index中的表单组件)存在频繁重渲染的情况,可以给MdEditor包裹React.memo,避免不必要的重渲染:

// 在文件末尾修改导出
export default React.memo(MdEditor);

内容的提问来源于stack exchange,提问作者Jung hyeonuk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:35:26