markdown的组件库-vditor,@uiw/react-md-editor

个人认为vditor是一个很强大的markdown组件,他的编辑器和渲染器基本上都不需要自己写,特别是渲染器,基本上什么都支持。如果对输入能力要求不是很高的话可以推荐使用(vditor有个缺点,工具栏不支持jsx,如果要加工具配置有下拉框什么的不太方便)。由于我目前写的项目对输入功能要求很高,用户使用过程中发现了一些问题,因为vditor的编辑器有自己的语法规则。导致有一些换行删除不了,比如说标题下面会强制有一行换行,或者表格里面不能用<br />标签进行换行。后面我就结合其他的库@uiw/react-md-editor来做编辑器,vditor来做渲染器。结合写了一个markdown组件。以下是部分简单的代码分析。

vditor

具有强大的编辑器和渲染器,可以自己配置cdn。使用起来十分方便

vditor官方:Vditor - 一款浏览器端的 Markdown 编辑器,支持所见即所得(富文本)、即时渲染(类似 Typora)和分屏预览模式 (b3log.org)

import Vditor from 'vditor'
const MarkDown=({initValue})=>{
    const vditor=useRef(null)
    useEffect(()=>{
       
             vditor.current =new Vditor('vditor',{
                 after:()=>{
                     vditor.current?.setValue(initValue)
                 },
                 placeholder:'暂无数据',
                 mode:'sv', // ir即使渲染 sv分屏 wysiwyg 所见即所得
                 preview:{
                     hljs:{
                         enable:true, // 代码高亮
                       
                     },
                     delay:200,//预览 毫秒间隔
                     transfrom:(html:string){ // 预览渲染之前
                     return html
                     
                 },
                     
                     
                 },
                blue:()=>{}, 
                focus:()=>{},
                input:(value)=>{
                    // value  为输入后最新值
                },
                keydown:()=>{},
                toolbarConfig:true, //工具栏
                toolbar:[
                    'headings',
                    'bold',
                    'italic',
                    'strike',
                    'line',
                    '|',
                    'quote',
                    'list',
                    // .....,
                    {
                        // 自定义工具栏
                        hotkey:'',//
                        name:'sponser',
                        tipPosition:'s',
                        className:'color',
                        icon:'<div>icon</div>',// string
                        click:()=>{},
                    }
                    
                ],
             //   cdn:'dhasasdsa', //cdn,不需要的话去掉
                  
                 
             })
        
        return ()=>{
            vditor.current = null
        }
    },[initValue])
    return <div id='vditor'>
        
        </div>
}
  cdn 是直接在git上把项目下载下来,打包到自己的cdn上面的。如果有网络问题,导致加载不出来的可以试试这个方法。

@uiw/react-md-editor

npm官网:@uiw/react-md-editor - npm (npmjs.com)

当时选择这个markdown编辑器,主要是因为上手快,他的输入没有限制,但是渲染要自己搞,这样废时间,可以和Vditor结合一下,自己做个组装。具体我Vditor是用的sv模式,但是把左边的编辑器隐藏了,直接展示右侧的预览模式。因为没有找到配置,自己手动做的渲染,因为预览模式可以显示文字颜色和背景颜色。

import MDEditor ,{commands} from '@uiw/react-md-editor'
const MarkdownEditor=({initValue,onchange})=>{
    const=[
        {
            name:'color',
            keyCommand:'color',
            buttonProps:{'aria-label':'Inser color'},
            icon:<div>icon</div>,
            execute:(state,api)=>{
        let modifyText='### ';
        api.replaceelection(modifyText)
        }
            
        },
      //  .....
    ]
    return <>
        <MDEditor
         value={initValue}
         onchange={(value)=>{
             onchange(value)
         }}
        commands={[
                  ...commands.getCommands(),
                  ...list // 其他自定义的组件 
                  ]}
        />
        </>
}
       
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值