# React CodeMirror
React CodeMirror is a comprehensive React component library for CodeMirror 6, providing a modern code editor with syntax highlighting, theming, and extensive customization options. Built with TypeScript and React hooks, it offers seamless integration with React applications while maintaining the full power of CodeMirror 6's extensibility. The library includes a rich ecosystem of pre-built themes, language support, and extensions for common editor features.
This library simplifies CodeMirror 6 integration by providing React-friendly APIs, automatic state management, and a collection of ready-to-use extensions. It supports controlled and uncontrolled component patterns, custom themes, merge views for diff visualization, and a flexible extension system. The package is designed for modern React applications (16.8+) with full TypeScript support and includes utilities for editor state serialization, event handling, and DOM manipulation.
## Core Component
### Basic CodeMirror Editor
```jsx
import React from 'react';
import CodeMirror from '@uiw/react-codemirror';
import { javascript } from '@codemirror/lang-javascript';
function App() {
const [value, setValue] = React.useState("console.log('hello world!');");
const onChange = React.useCallback((val, viewUpdate) => {
console.log('val:', val);
setValue(val);
}, []);
return (
);
}
```
### useCodeMirror Hook
```jsx
import { useEffect, useMemo, useRef } from 'react';
import { useCodeMirror } from '@uiw/react-codemirror';
import { javascript } from '@codemirror/lang-javascript';
export default function App() {
const editor = useRef();
const extensions = useMemo(() => [javascript()], []);
const { setContainer, view, state } = useCodeMirror({
container: editor.current,
extensions,
value: "console.log('hello world!');\n\n\n",
onChange: (value, viewUpdate) => {
console.log('Updated:', value);
},
});
useEffect(() => {
if (editor.current) {
setContainer(editor.current);
}
}, [editor.current]);
return
);
}
```
## Summary
React CodeMirror provides a production-ready code editor solution for React applications with minimal setup. The library excels in common scenarios like code playgrounds, documentation sites, configuration editors, and IDE-like interfaces. Its pre-built themes, language support for 50+ programming languages, and battle-tested extensions make it suitable for everything from simple syntax highlighting to complex multi-pane editing experiences. The component is highly performant with lazy loading, automatic state reconciliation, and optimized re-rendering.
Integration patterns follow standard React conventions with controlled/uncontrolled components, refs for imperative access, and hooks for advanced customization. The merge view component enables git-style diff visualization, while the extension system allows deep integration with CodeMirror's plugin ecosystem. State serialization enables features like undo/redo persistence, draft saving, and collaborative editing foundations. The library works seamlessly with React frameworks (Next.js, Remix, Vite) and includes TypeScript definitions for type-safe development.