# react-md-editor **Repository Path**: ilark/react-md-editor ## Basic Information - **Project Name**: react-md-editor - **Description**: 轻量级具有预览功能的 Markdown 编辑器,基于Textarea 封装,不依赖第三方编辑器,使用 React.js 和 TypeScript 实现。 - **Primary Language**: TypeScript - **License**: Not specified - **Default Branch**: master - **Homepage**: https://uiw.gitee.io/react-md-editor/ - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 14 - **Created**: 2020-08-18 - **Last Updated**: 2024-11-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

A simple markdown editor with preview, implemented with React.js and TypeScript. This React Component aims to provide a simple Markdown editor with syntax highlighting support. This is based on `textarea` encapsulation, so it does not depend on any modern code editors such as Acs, CodeMirror, Monaco etc. ### Features - 📑 Indent line or selected text by pressing tab key, with customizable indentation. - ♻️ Based on `textarea` encapsulation, does not depend on any modern code editors. - 🚧 Does not depend on the [`uiw`](https://github.com/uiwjs/uiw) component library. - 🚘 Automatic list on new lines. ### Quick Start ```bash npm i @uiw/react-md-editor ``` ### Using ```jsx import React from "react"; import ReactDOM from "react-dom"; import MDEditor from '@uiw/react-md-editor'; export default function App() { const [value, setValue] = React.useState("**Hello world!!!**"); return (
); } ``` - [Demo preview for CodeSandbox](https://codesandbox.io/s/markdown-editor-for-react-izdd6) - [Demo preview for Github gh-pages](https://uiwjs.github.io/react-md-editor/) - [Demo preview for Gitee gh-pages](https://uiw.gitee.io/react-md-editor/) ### Custom Toolbars ```tsx import React from "react"; import ReactDOM from "react-dom"; import MDEditor, { commands, ICommand, TextState, TextApi } from '@uiw/react-md-editor'; const title3: ICommand = { name: 'title3', keyCommand: 'title3', buttonProps: { 'aria-label': 'Insert title3' }, icon: ( ), execute: (state: TextState, api: TextApi) => { let modifyText = `### ${state.selectedText}\n`; if (!state.selectedText) { modifyText = `### `; } api.replaceSelection(modifyText); }, }; export default function App() { const [value, setValue] = React.useState("**Hello world!!!**"); return (
); } ``` ### Preview Markdown ```jsx import React from "react"; import ReactDOM from "react-dom"; import MDEditor from '@uiw/react-md-editor'; export default function App() { return (
); } ``` ### Support Custom KaTeX Preview KaTeX is a fast, easy-to-use JavaScript library for TeX math rendering on the web, We perform math rendering through [`KaTeX`](https://github.com/KaTeX/KaTeX). The following example is preview in [CodeSandbox](https://codesandbox.io/s/markdown-editor-katex-for-react-7v3vl). ```bash npm install katex ``` ```jsx import React from "react"; import ReactDOM from "react-dom"; import MDEditor from '@uiw/react-md-editor'; import katex from 'katex'; import 'katex/dist/katex.css'; const mdKaTeX = `This is to display the \`\$\$\c = \\pm\\sqrt{a^2 + b^2}\$\$\` in one line \`\`\`KaTeX c = \\pm\\sqrt{a^2 + b^2} \`\`\` `; const renderers = { inlineCode: ({ children }) => { if (/^\$\$(.*)\$\$/.test(children)) { const html = katex.renderToString(children.replace(/^\$\$(.*)\$\$/, '$1'), { throwOnError: false, }); return } return children; }, code: ({ children, language, value }) => { if (language.toLocaleLowerCase() === 'katex') { const html = katex.renderToString(value, { throwOnError: false }); return (
          
        
); } return children; } } export default function App() { return ( ); } ``` ### Props - `value: string`: The Markdown value. - `onChange?: (value: string)`: Event handler for the `onChange` event. - `commands?: ICommand[]`: An array of [`ICommand`](https://github.com/uiwjs/react-md-editor/blob/098c0b657300bfbfef83976558ee37f737e842a2/src/commands/index.ts#L20-L29), which, each one, contain a [`commands`](https://github.com/uiwjs/react-md-editor/blob/098c0b657300bfbfef83976558ee37f737e842a2/src/commands/index.ts#L111-L112) property. If no commands are specified, the default will be used. Commands are explained in more details below. - `autoFocus?: number=true`: Can be used to make `Markdown Editor` focus itself on initialization. - `previewOptions?: ReactMarkdown.ReactMarkdownProps`: This is reset [react-markdown](https://github.com/rexxars/react-markdown) settings. - `textareaProps?: TextareaHTMLAttributes`: Set the `textarea` related props. - `height?: number=200`: The height of the editor. - `visiableDragbar?: boolean=true`: Show drag and drop tool. Set the height of the editor. - `fullscreen?: boolean=false`: Show markdown preview. - `preview?: 'live' | 'edit' | 'preview'`: Default value `live`, Show markdown preview. - `maxHeight?: number=1200`: Maximum drag height. The `visiableDragbar=true` value is valid. - `minHeights?: number=100`: Minimum drag height. The `visiableDragbar=true` value is valid. - `tabSize?: number=2`: The number of characters to insert when pressing tab key. Default `2` spaces. ### Development ```bash npm run watch:types # Listen create type files. npm run watch:ts # Listen compile .tsx files. npm run doc:dev # Preview code example. ``` ### Other If you need more features-rich Markdown Editor, you can use [@uiwjs/react-markdown-editor](https://github.com/uiwjs/react-markdown-editor) ### License Licensed under the MIT License.