2020年7月24日(code editor)


上一篇写的是react-monaco-editor的使用,当时写的是json格式,仅仅修改了几个属性,并没有把全部的代码都进行操作,因为当时也有想过操作全部的代码,但是一个字符串又怎么能当方法使用呢,但是老板说,我们要写全部的代码,别人复制我们的代码之后可以直接用的那种:smirk:

当时有想过用eval直接转成方法执行,可是不知道是不是识别不了react hook的语法还是什么,抱了语法错误,于是就放弃了这个方法,我又找到了另一个组件react-simple-code-editor,这个组件提供了方法,我可以直接使用字符串转对象了因为他用到了babel

image-20200724203120260

这下觉得我离成功不远了,就在写到之后的时候,我又绝望了,因为他封装的组件其实也是依赖于另一个组件,他就做了一个二次封装,只提供了onchange的方法,也就是实时改变,可是不是我们的需求,之前在react-monaco-editor里面我有改过源码,觉得一个方法不难改,于是我改了,在源码里加了这么一段代码

image-20200724203435027

心想这次可以了,的确光标离开他才触发code的改变,可是我编辑框里面的内容有没有实时更新,绝望呀,感觉他这个设计非常不合理,作为一个编辑框,非要使用onchange事件触发,我的编辑框内容才会发生改变,难道不应该是默认的吗,但是他的原理是这样的

image-20200724203831295

在这里传入一个方法onValueChange然后调用_handleChange把code以回调的形式传给我,在触发dispatch传给我上面图片右边的部分,也就是我接受code的部分,code在通过转化

image-20200724203908482

但是每次想要编辑框里面的内容实时更新,页面也会实时刷新,这并不是我想要的效果,所以要把这两个事件分开单独操作互不影响,源码如下

image-20200724204415932

image-20200724204428606

他以写实,必须页面渲染,我的编辑框才更新,你说气不气,就好比做数学题,每次觉得答案要出来了,后来发现无解的感觉:cry:

于是我在绝望中寻找新的方法,突然意识到我可以把这两个编辑器的优点合起来呀,第一个编辑器,我可以自己修改事件,第二个编辑器我可以将字符串转化,于是我又换回了react-monaco-eiditor

image-20200724204818287

有了最后的效果图

image-20200724204912358

终于成功了,属实不赖,不过现在还没有高亮提示,需要配置,现在去看看
配置之后
最后效果


Author: wxy
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source wxy !
  TOC