<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          md-editor簡單的 Markdown 編輯器

          聯(lián)合創(chuàng)作 · 2023-09-30 14:30

          md-editor 帶有預(yù)覽功能的簡單 Markdown 編輯器,使用 React.js 和 TypeScript 實現(xiàn)。 提供具有語法突出顯示,自動按需懶加載 prismjs 的 187 種語言高亮的簡單 Markdown 編輯器。 這基于 textarea 封裝,因此它不依賴于任何現(xiàn)代代碼編輯器,如 Acs,CodeMirror,Monaco 等,同時支持工具欄高度定制。

          特征

          • ?? 通過按Tab鍵縮進行或選定的文本,并使用可自定義的縮進。
          • ?? 基于 textarea 封裝,不依賴于任何現(xiàn)代代碼編輯器。
          • ?? 不依賴 uiw 中的任何組件。
          • ?? 新行上的自動有序無需列表。
          • ??支持自動按需懶加載 prismjs 的 187 種語言高亮。
          • ??支持編輯和預(yù)覽滾動條聯(lián)動效果。
          • ??Gitee 實例預(yù)覽:https://uiw.gitee.io/react-md-editor/
          • ??Github 實例預(yù)覽:https://uiwjs.github.io/react-md-editor/ 
          • ??CodeSandbox 實例預(yù)覽

          快速開始

          npm i @uiw/react-md-editor

          使用

          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 (
              <div className="container">
                <MDEditor
                  value={value}
                  onChange={setValue}
                />
                <MDEditor.Markdown source={value} />
              </div>
            );
          }

           

          自定義工具欄

          import React from "react";
          import ReactDOM from "react-dom";
          import MDEditor, { commands } from '@uiw/react-md-editor';
          
          const title3: commands.ICommand = {
            name: 'title3',
            keyCommand: 'title3',
            buttonProps: { 'aria-label': 'Insert title3' },
            icon: (
              <svg width="12" height="12" viewBox="0 0 520 520">
                <path fill="currentColor" d="M15.7083333,468 C7.03242448,468 0,462.030833 0,454.666667 L0,421.333333 C0,413.969167 7.03242448,408 15.7083333,408 L361.291667,408 C369.967576,408 377,413.969167 377,421.333333 L377,454.666667 C377,462.030833 369.967576,468 361.291667,468 L15.7083333,468 Z M21.6666667,366 C9.69989583,366 0,359.831861 0,352.222222 L0,317.777778 C0,310.168139 9.69989583,304 21.6666667,304 L498.333333,304 C510.300104,304 520,310.168139 520,317.777778 L520,352.222222 C520,359.831861 510.300104,366 498.333333,366 L21.6666667,366 Z M136.835938,64 L136.835937,126 L107.25,126 L107.25,251 L40.75,251 L40.75,126 L-5.68434189e-14,126 L-5.68434189e-14,64 L136.835938,64 Z M212,64 L212,251 L161.648438,251 L161.648438,64 L212,64 Z M378,64 L378,126 L343.25,126 L343.25,251 L281.75,251 L281.75,126 L238,126 L238,64 L378,64 Z M449.047619,189.550781 L520,189.550781 L520,251 L405,251 L405,64 L449.047619,64 L449.047619,189.550781 Z" />
              </svg>
            ),
            execute: (state: commands.TextState, api: commands.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 (
              <div className="container">
                <MDEditor
                  value="Hello Markdown!"
                  commands={[
                    commands.bold, commands.hr, commands.italic, commands.divider, commands.codeEdit, commands.codeLive, commands.codePreview, commands.divider,
                    commands.fullscreen, 
                    // Custom Toolbars
                    title3,
                  ]}
                />
              </div>
            );
          }

          單獨預(yù)覽 Markdown

          import React from "react";
          import ReactDOM from "react-dom";
          import MDEditor from '@uiw/react-md-editor';
          
          export default function App() {
            return (
              <div className="container">
                <MDEditor.Markdown source="Hello Markdown!" />
              </div>
            );
          }

          支持自定義 KaTeX 預(yù)覽

          KaTeX 是一個快速,易于使用的 JavaScript 庫,用于在 Web 上進行 TeX 數(shù)學(xué)渲染,我們通過 KaTeX執(zhí)行數(shù)學(xué)渲染。

          以下實例是在 CodeSandbox 中的預(yù)覽效果

          npm install katex
          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 <code dangerouslySetInnerHTML={{ __html: html }} />
              }
              return children;
            },
            code: ({ children, language, value }) => {
              if (language.toLocaleLowerCase() === 'katex') {
                const html = katex.renderToString(value, {
                  throwOnError: false
                });
                return (
                  <pre>
                    <code dangerouslySetInnerHTML={{ __html: html }} />
                  </pre>
                );
              }
              return children;
            }
          }
          
          export default function App() {
            return (
              <MDEditor value={mdKaTeX} previewOptions={{ renderers: renderers }} />
            );
          }

           

          瀏覽 21
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产自产精品一区精品 | 97人妻人人揉人人躁人人爽 | 欧美色图俺去啦 | 国产九九九在线观看 | aaa大片 |