react-monaco-markdown 操作手册
读者来稿 · song-shao与 batype 的 AI 分身对话整理
react-monaco-markdown#
安装#
npm#
npm i react-monaco-markdown
pnpm#
pnpm i react-monaco-markdown
yarn#
yarn add react-monaco-markdown
使用#
import ReactMonacoMarkdown from 'react-monaco-markdown'
<ReactMonacoMarkdown
value={'**Hello react-monaco-markdown!!!**'}
onChange={pre => changeData(pre.text)}
/>
Options#
| 参数 | 说明 | 类型 | 默认值 | 是否必填 | 版本 |
|---|---|---|---|---|---|
| className | 类 | string | - | false | >= 1.0.6 |
| style | style样式 | React.CSSProperties | - | false | >= 1.0.6 |
| value | 属性值 | string | - | false | |
| onChange | 修改数据方法 | (pre: ReturnValue) => void | - | false | |
| renderHtml | 渲染html 方法 | (pre: ReturnValue) => React.ReactNode | - | false | |
| config | 额外配置 | EditorConfig | - | false | >= 1.0.6 |
| width | 宽度 | number/string | 100% | false | >= 1.0.7 |
| height | 高度 | number/string | 100% | false | >= 1.0.7 |
| options | monaco-editor 的 options 配置 | editor.IStandaloneEditorConstructionOptions | - | false | >= 1.0.7 |
EditorConfig#
| 参数 | 说明 | 类型 | 默认值 | 是否必填 | 版本 |
|---|---|---|---|---|---|
| theme | 主题 | 'light' / 'dark' | 'light' | false | >= 1.0.7 |
| isReadOnly | 是否只读 | Boolean | false | false | >= 1.0.7 |
| view | 切换展示视图 | View | - | false | >= 1.0.7 |
| htmlClass | 展示区域class | string | - | false | >= 1.0.7 |
| markdownClass | 编写区域class | string | - | false | >= 1.0.7 |
| table | 表格配置 | Table | - | false | >= 1.0.7 |
| imageUrl | 预设 图片 URL | string | - | false | >= 1.0.7 |
| imageAccept | 图片accept | string | - | false | >= 1.0.7 |
| linkUrl | 预设 link Url | string | - | false | >= 1.0.7 |
| onCustomImageUpload | 自定义图片上传 | (event: any) => Promise<{ url: string; text?: string }> | - | false | >= 1.0.7 |
| onImageUpload | 本地图片上传 | UploadFunc | - | false | >= 1.0.7 |
Table#
export interface Table {
maxRow: number;
maxCol: number;
}
View#
export interface View {
menu?: boolean;
both?: boolean;
md?: boolean;
html?: boolean;
}
UploadFunc#
export type UploadFunc =
| ((file: File) => Promise<string>)
| ((file: File, callback: (url: string) => void) => void);
在 Next.js 中使用#
import dynamic from 'next/dynamic'
const ReactMonacoMarkdown = dynamic(() => import('react-monaco-markdown'), {ssr: false})
const NextMarkdownPreview = dynamic(() => import('react-monaco-markdown').then(res => res.NextMarkdownPreview), {ssr: false})
<ReactMonacoMarkdown
value={'**Hello react-monaco-markdown!!!**'} />
onChange={pre => changeData(pre.text)}
renderHtml={pre => <NextMarkdownPreview code={pre.text} />}
/>
LICENSE#
MIT
相关文章
- 如何监听 div 是否渲染完成
本文介绍了在Next.js中使用NextMarkdownPreview组件时,如何通过MutationObserver监听div的ref对象来解决按需加载导致的加载慢问题。通过监听childList变化,可以及时获取容器内容变化,优化用户体验。
- monaco-editor-react
Monaco Editor for React集成了monaco-editor,适用于任何React应用,无需配置webpack等打包工具。支持TypeScript重写,提供多模型编辑器,与@monaco-editor/loader集成,提供开发/游乐场地。主要特性包括:无需配置即可使用、支持多模型编辑、提供Editor和DiffEditor组件、支持自定义主题和语言、提供丰富的API和事件处理。
- 我对 React Server Components 的看法:方向对了,代价被低估了
RSC 解决的是真问题,但它给心智模型和生态带来的撕裂,比宣传里说的大得多。