跳到主要内容

Code Editor — React

@aiao/code-editor-react 提供标准 React 受控组件。

安装

npm install @aiao/code-editor-react

Peer dependencies: react >= 18

基础用法

import { useState } from 'react';
import { CodeEditor } from '@aiao/code-editor-react';

function App() {
const [code, setCode] = useState('SELECT * FROM users;');

return <CodeEditor value={code} onChange={setCode} language="sql" theme="dark" lineWrapping />;
}

组件 Props

interface CodeEditorProps {
value?: string;
onChange?: (value: string) => void;
theme?: 'light' | 'dark';
language?: string;
placeholder?: string;
readonly?: boolean;
disabled?: boolean;
setup?: 'basic' | 'minimal';
indentWithTab?: boolean;
indentUnit?: string;
lineWrapping?: boolean;
highlightWhitespace?: boolean;
}
Prop类型默认值说明
valuestring''编辑器内容
onChange(value: string) => void内容变化回调
theme'light' | 'dark''light'主题
languagestring'sql'语言名称
placeholderstring占位文本
readonlybooleanfalse只读模式
disabledbooleanfalse禁用编辑
setup'basic' | 'minimal''basic'预设扩展包
indentWithTabbooleanfalseTab 缩进
indentUnitstring缩进单位
lineWrappingbooleanfalse自动换行
highlightWhitespacebooleanfalse高亮空白字符

受控模式

React 版本为受控组件,外部 value 变化时内部对比避免循环更新:

function SqlEditor({ initialSql }: { initialSql: string }) {
const [sql, setSql] = useState(initialSql);
const [result, setResult] = useState('');

const handleRun = async () => {
const res = await executeQuery(sql);
setResult(JSON.stringify(res, null, 2));
};

return (
<div className="flex flex-col gap-4">
<CodeEditor value={sql} onChange={setSql} language="sql" />
<button onClick={handleRun}>执行</button>
<CodeEditor value={result} language="json" readonly />
</div>
);
}