import React, { useEffect, useRef } from 'react'
import { Tooltip } from 'antd'
import { FullscreenOutlined } from '@ant-design/icons'
import * as monaco from 'monaco-editor'
interface IProps {
height?: number
readOnly?: boolean
}
const Index: React.FC<IProps> = (props: any) => {
const { value, onChange, height = 500, readOnly } = props
const monacoEditorRef = useRef<any>()
const domRef = useRef<any>()
useEffect(() => {
newMonaco()
return () => {
monacoEditorRef.current?.dispose() // 卸载编辑器
monacoEditorRef.current = undefined
}
}, [])
useEffect(() => {
try {
monacoEditorRef?.current?.setValue(value)
} catch {}
}, [value])
const newMonaco = () => {
try {
monacoEditorRef.current = monaco?.editor?.create(domRef.current, {
language: 'json', // 编辑器类型支持
minimap: { enabled: false }, // 小地图
automaticLayout: true, // 自动布局,
codeLens: true,
colorDecorators: true,
contextmenu: false,
readOnly: readOnly, //是否只读
formatOnPaste: true,
overviewRulerBorder: false, // 滚动条的边框
scrollBeyondLastLine: true,
theme: 'vs-dark', // 主题
fontSize: 14, // 字体
wordWrap: 'on' // 换行
})
monacoEditorRef.current.onDidBlurEditorText(async () => {
onChange(monacoEditorRef.current.getValue())
})
} catch {}
}
const fullscreenStyle = {
display: 'flex',
flexDirection: 'row-reverse',
position: 'absolute',
top: -25,
right: 5,
zIndex: 999,
fontSize: 'large',
fontWeight: 'bold'
}
return (
<div style={{ position: 'relative' }}>
<div style={fullscreenStyle}>
<Tooltip title='全屏编辑'>
<FullscreenOutlined
onClick={() => {
if (document.fullscreenElement) {
document.exitFullscreen()
} else {
domRef.current.requestFullscreen()
}
}}
/>
</Tooltip>
</div>
<div ref={domRef} style={{ minHeight: 500, height }} />
</div>
)
}
export default Index
组件化编辑器
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 方案一:给h2添加contenteditable="true"属性,用v-on指令绑定h2 的input事件,调用...
- 安装Monaco:npm install monaco-editor --save npm install mon...
- 开篇 安装mavon-editor 按需引入、配置在要使用markdown编辑器的组件内操作: 全局注册 自定义样...