# react-codemirror **Repository Path**: uiw/react-codemirror ## Basic Information - **Project Name**: react-codemirror - **Description**: 基于 React 的 CodeMirror 代码编辑器。 - **Primary Language**: JavaScript - **License**: MIT - **Default Branch**: master - **Homepage**: https://uiw.gitee.io/react-codemirror - **GVP Project**: No ## Statistics - **Stars**: 45 - **Forks**: 13 - **Created**: 2019-08-03 - **Last Updated**: 2025-01-22 ## Categories & Tags **Categories**: react-extensions **Tags**: None ## README
# react-codemirror [](https://www.jsdelivr.com/package/npm/@uiw/react-codemirror) [](https://www.npmjs.com/package/@uiw/react-codemirror) [](https://github.com/uiwjs/react-codemirror/actions) [](https://uiwjs.github.io/npm-unpkg/#/pkg/@uiw/react-codemirror/file/README.md) [](https://www.npmjs.com/package/@uiw/react-codemirror) [](https://uiwjs.github.io/react-codemirror/coverage/lcov-report/) [](https://gitpod.io/#https://github.com/uiwjs/react-codemirror) CodeMirror component for React. Demo Preview: [@uiwjs.github.io/react-codemirror](https://uiwjs.github.io/react-codemirror/) **Features:** 🚀 Quickly and easily configure the API. 🌱 Versions after `@uiw/react-codemirror@v4` use [codemirror 6](https://codemirror.net/). [#88](https://github.com/uiwjs/react-codemirror/issues/88#issuecomment-914185563). ⚛️ Support the features of React Hook(requires React 16.8+). 📚 Use Typescript to write, better code hints. 🌐 The bundled version supports use directly in the browser [#267](https://github.com/uiwjs/react-codemirror/issues/267#issuecomment-1041227592). 🌎 There are better [sample previews](https://uiwjs.github.io/react-codemirror). 🎨 Support [theme](https://uiwjs.github.io/react-codemirror/#/theme/data/dracula) customization, provide theme [editor](https://uiwjs.github.io/react-codemirror/#/editor/theme). ## Install **Not dependent on uiw.** ```bash npm install @uiw/react-codemirror --save ``` **All Packages** | Name | NPM Version | Website | | :------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | | `@uiw/react-codemirror` | [](https://www.npmjs.com/package/@uiw/react-codemirror) [](https://www.npmjs.com/package/@uiw/react-codemirror) | [`#preview`](https://uiwjs.github.io/react-codemirror/) | | `react-codemirror-merge` | [](https://www.npmjs.com/package/react-codemirror-merge) [](https://www.npmjs.com/package/react-codemirror-merge) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/merge/document) | | `@uiw/codemirror-extensions-basic-setup` | [](https://www.npmjs.com/package/@uiw/codemirror-extensions-basic-setup) [](https://www.npmjs.com/package/@uiw/codemirror-extensions-basic-setup) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/extensions/basic-setup) | | `@uiw/codemirror-extensions-color` | [](https://www.npmjs.com/package/@uiw/codemirror-extensions-color) [](https://www.npmjs.com/package/@uiw/codemirror-extensions-color) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/extensions/color) | | `@uiw/codemirror-extensions-classname` | [](https://www.npmjs.com/package/@uiw/codemirror-extensions-classname) [](https://www.npmjs.com/package/@uiw/codemirror-extensions-classname) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/extensions/classname) | | `@uiw/codemirror-extensions-events` | [](https://www.npmjs.com/package/@uiw/codemirror-extensions-events) [](https://www.npmjs.com/package/@uiw/codemirror-extensions-events) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/extensions/events) | | `@uiw/codemirror-extensions-hyper-link` | [](https://www.npmjs.com/package/@uiw/codemirror-extensions-hyper-link) [](https://www.npmjs.com/package/@uiw/codemirror-extensions-hyper-link) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/extensions/hyper-link) | | `@uiw/codemirror-extensions-langs` | [](https://www.npmjs.com/package/@uiw/codemirror-extensions-langs) [](https://www.npmjs.com/package/@uiw/codemirror-extensions-langs) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/extensions/languages) | | `@uiw/codemirror-extensions-line-numbers-relative` | [](https://www.npmjs.com/package/@uiw/codemirror-extensions-line-numbers-relative) [](https://www.npmjs.com/package/@uiw/codemirror-extensions-line-numbers-relative) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/extensions/line-numbers-relative) | | `@uiw/codemirror-extensions-mentions` | [](https://www.npmjs.com/package/@uiw/codemirror-extensions-mentions) [](https://www.npmjs.com/package/@uiw/codemirror-extensions-mentions) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/extensions/mentions) | | `@uiw/codemirror-extensions-zebra-stripes` | [](https://www.npmjs.com/package/@uiw/codemirror-extensions-zebra-stripes) [](https://www.npmjs.com/package/@uiw/codemirror-extensions-zebra-stripes) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/extensions/zebra-stripes) | | `@uiw/codemirror-themes` | [](https://www.npmjs.com/package/@uiw/codemirror-themes) [](https://www.npmjs.com/package/@uiw/codemirror-themes) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/theme/doc) | | Name | NPM Version | Website | | :---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | | `@uiw/codemirror-themes-all` | [](https://www.npmjs.com/package/@uiw/codemirror-themes-all) [](https://www.npmjs.com/package/@uiw/codemirror-themes-all) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/theme/all) | | `@uiw/codemirror-theme-abcdef` | [](https://www.npmjs.com/package/@uiw/codemirror-theme-abcdef) [](https://www.npmjs.com/package/@uiw/codemirror-theme-abcdef) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/theme/data/abcdef) | | `@uiw/codemirror-theme-androidstudio` | [](https://www.npmjs.com/package/@uiw/codemirror-theme-androidstudio) [](https://www.npmjs.com/package/@uiw/codemirror-theme-androidstudio) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/theme/data/androidstudio) | | `@uiw/codemirror-theme-atomone` | [](https://www.npmjs.com/package/@uiw/codemirror-theme-atomone) [](https://www.npmjs.com/package/@uiw/codemirror-theme-atomone) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/theme/data/atomone) | | `@uiw/codemirror-theme-aura` | [](https://www.npmjs.com/package/@uiw/codemirror-theme-aura) [](https://www.npmjs.com/package/@uiw/codemirror-theme-aura) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/theme/data/aura) | | `@uiw/codemirror-theme-bbedit` | [](https://www.npmjs.com/package/@uiw/codemirror-theme-bbedit) [](https://www.npmjs.com/package/@uiw/codemirror-theme-bbedit) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/theme/data/bbedit) | | `@uiw/codemirror-theme-bespin` | [](https://www.npmjs.com/package/@uiw/codemirror-theme-bespin) [](https://www.npmjs.com/package/@uiw/codemirror-theme-bespin) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/theme/data/bespin) | | `@uiw/codemirror-theme-duotone` | [](https://www.npmjs.com/package/@uiw/codemirror-theme-duotone) [](https://www.npmjs.com/package/@uiw/codemirror-theme-duotone) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/theme/data/duotone/light) | | `@uiw/codemirror-theme-dracula` | [](https://www.npmjs.com/package/@uiw/codemirror-theme-dracula) [](https://www.npmjs.com/package/@uiw/codemirror-theme-dracula) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/theme/data/dracula) | | `@uiw/codemirror-theme-darcula` | [](https://www.npmjs.com/package/@uiw/codemirror-theme-darcula) [](https://www.npmjs.com/package/@uiw/codemirror-theme-darcula) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/theme/data/darcula) | | `@uiw/codemirror-theme-eclipse` | [](https://www.npmjs.com/package/@uiw/codemirror-theme-eclipse) [](https://www.npmjs.com/package/@uiw/codemirror-theme-eclipse) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/theme/data/eclipse) | | `@uiw/codemirror-theme-github` | [](https://www.npmjs.com/package/@uiw/codemirror-theme-github) [](https://www.npmjs.com/package/@uiw/codemirror-theme-github) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/theme/data/github) | | `@uiw/codemirror-theme-gruvbox-dark` | [](https://www.npmjs.com/package/@uiw/codemirror-theme-gruvbox-dark) [](https://www.npmjs.com/package/@uiw/codemirror-theme-gruvbox-dark) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/theme/data/gruvbox/dark) | | `@uiw/codemirror-theme-material` | [](https://www.npmjs.com/package/@uiw/codemirror-theme-material) [](https://www.npmjs.com/package/@uiw/codemirror-theme-material) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/theme/data/material/dark) | | `@uiw/codemirror-theme-noctis-lilac` | [](https://www.npmjs.com/package/@uiw/codemirror-theme-noctis-lilac) [](https://www.npmjs.com/package/@uiw/codemirror-theme-noctis-lilac) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/theme/data/noctis-lilac) | | `@uiw/codemirror-theme-nord` | [](https://www.npmjs.com/package/@uiw/codemirror-theme-nord) [](https://www.npmjs.com/package/@uiw/codemirror-theme-nord) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/theme/data/nord) | | `@uiw/codemirror-theme-okaidia` | [](https://www.npmjs.com/package/@uiw/codemirror-theme-okaidia) [](https://www.npmjs.com/package/@uiw/codemirror-theme-okaidia) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/theme/data/okaidia) | | `@uiw/codemirror-theme-solarized` | [](https://www.npmjs.com/package/@uiw/codemirror-theme-solarized) [](https://www.npmjs.com/package/@uiw/codemirror-theme-solarized) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/theme/data/solarized/dark) | | `@uiw/codemirror-theme-sublime` | [](https://www.npmjs.com/package/@uiw/codemirror-theme-sublime) [](https://www.npmjs.com/package/@uiw/codemirror-theme-sublime) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/theme/data/sublime) | | `@uiw/codemirror-theme-tokyo-night` | [](https://www.npmjs.com/package/@uiw/codemirror-theme-tokyo-night) [](https://www.npmjs.com/package/@uiw/codemirror-theme-tokyo-night) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/theme/data/tokyo-night) | | `@uiw/codemirror-theme-tokyo-night-storm` | [](https://www.npmjs.com/package/@uiw/codemirror-theme-tokyo-night-storm) [](https://www.npmjs.com/package/@uiw/codemirror-theme-tokyo-night-storm) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/theme/data/tokyo-night-storm) | | `@uiw/codemirror-theme-tokyo-night-day` | [](https://www.npmjs.com/package/@uiw/codemirror-theme-tokyo-night-day) [](https://www.npmjs.com/package/@uiw/codemirror-theme-tokyo-night-day) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/theme/data/tokyo-night-day) | | `@uiw/codemirror-theme-vscode` | [](https://www.npmjs.com/package/@uiw/codemirror-theme-vscode) [](https://www.npmjs.com/package/@uiw/codemirror-theme-vscode) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/theme/data/vscode) | | `@uiw/codemirror-theme-xcode` | [](https://www.npmjs.com/package/@uiw/codemirror-theme-xcode) [](https://www.npmjs.com/package/@uiw/codemirror-theme-xcode) | [`#preview`](https://uiwjs.github.io/react-codemirror/#/theme/data/xcode) | ## Usage [](https://codesandbox.io/embed/react-codemirror-example-codemirror-6-slvju?fontsize=14&hidenavigation=1&theme=dark) ```jsx mdx:preview import React from 'react'; import CodeMirror from '@uiw/react-codemirror'; import { javascript } from '@codemirror/lang-javascript'; function App() { const onChange = React.useCallback((value, viewUpdate) => { console.log('value:', value); }, []); return (