CodeEditor.tsx

CodeEditor.tsx

基本信息

  • 类型: React 组件 (自定义)
  • 路径: ./src/components/ui/code-editor.tsx

功能描述

基于 Monaco Editor 的代码编辑器组件,支持 JSON、YAML、Markdown 语言。具有防抖更新、主题适配、光标插入等功能。

导出内容

  • CodeEditor - 代码编辑器组件(已使用 memo 优化)
  • CodeEditorHandle - 编辑器句柄接口类型

Props 接口

CodeEditor

属性类型必填默认值说明
valuestring-编辑器内容
onChange(value: string) => void-内容变化回调
language`'json' \'yaml' \'markdown'`-代码语言
placeholderstring-占位文本
classNamestring-自定义CSS类名
minHeightstring'300px'最小高度
debounceMsnumber0防抖延迟毫秒数
readOnlybooleanfalse是否只读

CodeEditorHandle

属性类型说明
insertAtCursor(text: string) => void在光标位置插入文本

依赖

  • @monaco-editor/react - Monaco Editor React 封装
  • next-themes - 主题管理
  • @/lib/utils - 工具函数 (cn)

使用示例

import { CodeEditor, CodeEditorHandle } from "@/components/ui/code-editor";
import { useRef, useState } from "react";

// 基础用法
const [code, setCode] = useState('{}');
<CodeEditor
  value={code}
  onChange={setCode}
  language="json"
  placeholder="输入 JSON..."
/>

// 带防抖
<CodeEditor
  value={code}
  onChange={setCode}
  language="yaml"
  debounceMs={500}
  minHeight="400px"
/>

// 使用 ref 插入文本
const editorRef = useRef<CodeEditorHandle>(null);
const handleInsert = () => {
  editorRef.current?.insertAtCursor('"key": "value"');
};
<CodeEditor
  ref={editorRef}
  value={code}
  onChange={setCode}
  language="json"
/>
← 返回目录