react-monaco-editor
是一个 基于 React 封装的 Monaco Editor 组件库 ,它让你可以在 React 项目中方便地使用 Monaco Editor ------ 也就是 VS Code 的编辑器核心引擎。
📦 简介
- Monaco Editor:微软开发的浏览器端代码编辑器,功能强大,支持语法高亮、自动补全、智能提示(IntelliSense)、主题切换等。
- react-monaco-editor:是一个社区维护的 React 包装器,让开发者可以更方便地在 React 应用中集成 Monaco Editor。
🧰 安装方式
bash
npm install react-monaco-editor monaco-editor
# 或者
yarn add react-monaco-editor monaco-editor
✅ 基本使用示例
jsx
import React from 'react';
import MonacoEditor from 'react-monaco-editor';
class CodeEditor extends React.Component {
constructor(props) {
super(props);
this.state = {
code: '// 输入你的代码\nconsole.log("Hello, world");',
};
}
editorDidMount(editor, monaco) {
console.log('editor mounted', editor, monaco);
}
onChange(newValue, e) {
console.log('onChange', newValue, e);
this.setState({ code: newValue });
}
render() {
const { code } = this.state;
return (
<MonacoEditor
width="800"
height="600"
language="javascript"
theme="vs-dark"
value={code}
options={{
selectOnLineNumbers: true,
minimap: {
enabled: false
}
}}
onChange={this.onChange.bind(this)}
editorDidMount={this.editorDidMount.bind(this)}
/>
);
}
}
🔧 主要 Props 支持
Prop 名称 | 类型 | 描述 |
---|---|---|
value |
string | 编辑器初始内容 |
language |
string | 设置语言模式(如 javascript , typescript , html , json , python 等) |
theme |
string | 设置主题(如 vs , vs-dark , hc-black ) |
width / height |
number or string | 控制编辑器大小 |
options |
object | Monaco 编辑器配置项(参考官方文档) |
onChange |
function | 内容变化时触发 |
editorDidMount |
function | 编辑器初始化完成后调用,可用于获取 editor 实例 |
🌐 支持的语言和扩展性
你可以通过引入额外的语言包来支持更多语言,比如:
- SQL
- Python
- Markdown
- PHP
- Java
- Go
- Vue / React JSX
也可以配合 monaco-editor-webpack-plugin
使用 Webpack 构建优化加载速度。
🎨 主题自定义
你可以使用默认提供的主题,也可以自己定义或导入第三方主题。例如:
js
import 'monaco-editor/theme/my-custom-theme.css';
然后设置:
jsx
theme="my-custom-theme"
🚀 高级用法
1. 自定义语言语法
可以通过注册新的语言和语法解析器实现自定义 DSL。
2. 智能提示 & Linting
结合 monaco.languages.registerCompletionItemProvider()
可以添加自动补全; 结合 monaco.editor.setModelMarkers()
可以实现错误提示(类似 ESLint)。
3. 多文件编辑(Tab 切换)
虽然 react-monaco-editor
默认只支持单个编辑器实例,但你可以在外层封装多个 <MonacoEditor />
来实现多标签页编辑。
⚠️ 注意事项
- 性能问题:Monaco Editor 体积较大(约 1~2MB),建议按需加载或异步加载。
- SSR 支持差 :由于 Monaco 是依赖 DOM 的编辑器,不适用于 SSR(如 Next.js),推荐在组件
useEffect
中动态加载。 - Webpack 配置优化:避免将整个 Monaco 打包进主 JS 文件,可通过插件拆分。
📚 相关资源
- GitHub 地址:github.com/solodynamo/...
- Monaco Editor 官网:microsoft.github.io/monaco-edit...
- Monaco Editor API 文档:microsoft.github.io/monaco-edit...
✅ 替代方案
如果你希望有更好的 React 集成体验,还可以考虑:
@monaco-editor/react
:一个更现代的封装库,支持懒加载、TypeScript 更友好。react-ace
:基于 Ace Editor,更轻量,适合不需要 VS Code 级功能的场景。
🧑💻 总结
特性 | react-monaco-editor |
---|---|
功能强大 | ✅ |
社区活跃 | ✅ |
轻量 | ❌(体积大) |
易于集成 | ✅(React) |
支持 TS/JSX/HTML/CSS | ✅ |
支持智能提示 | ✅(需要配置) |
支持 SSR | ❌ |
如果你想构建一个在线代码编辑器、IDE 类产品,或者需要高级编辑功能的 Web 应用,react-monaco-editor
是非常合适的选择!
如果你有具体的需求(比如想嵌入 JSON Schema 校验、实现代码运行沙盒、与 TypeScript 结合等),我也可以提供详细实现方案。欢迎继续提问!