当前位置: 首页 > news >正文

解决在Vue3中使用monaco-editor创建多个实例的导致页面卡死的问题

最近在项目中使用到了monaco-editor来实现相关的业务功能,按照官方使用方法进行了相关操作,但是在使用的时候,总是会导致创建多个编辑器实例,导致页面卡死的情况,下面来看看怎么处理这种情况吧,先说一下我使用的技术栈,主要是以Vue3为主的技术
在这里插入图片描述

以上是项目的主体页面,主要分为四个部分,其中第一二四块主要使用了JSON Schema的相关语法,主要目的是为了生成第三块的表单内容,一二四块使用的是基于monaco-editor封装的编辑组件,在该组件内部,根据文档提示:
https://novaalone.github.io/monaco-editor-doc-zh/guide/start.html
定义了相关的monaco-editor实例对象

onMounted(() => {if (editorRef.value !== null) {editor.value = Monaco.editor.create(editorRef.value as HTMLElement, {value: props.code,language: "json",theme: "vs-dark",readOnly: props.readOnly,formatOnPaste: true,tabSize: 2,minimap: {enabled: false}, // 是否启用预览图acceptSuggestionOnEnter: "on",autoClosingBrackets: "always", // 是否自动添加结束括号(包括中括号)autoClosingQuotes: "always", // 是否自动添加结束的单引号 双引号autoIndent: "brackets", // 是否自动缩进folding: true, // 是否启用代码折叠links: true, // 是否点击链接scrollBeyondLastLine: false //设置编辑器是否可以滚动到最后一行之后})} else {console.error("editorDom is not a DOM element")}
})

但是在使用的过程中发现每次进入页面总会重复创建相关的编辑器实例,导致编辑器除首次进入外正常显示数据,在之后页面切换后再进入会导致编辑器没有数据,经过查询资料,发现问题如下

  1. monaco-editor这个包的时间比较久,与其比较适配的应当是Vue2技术栈
  2. 在最开始的开发中,定义响应式对象来接收编辑器数据的值,但是编辑器实例需要使用原生对象来接收
    在Vue3中,我们可以使用toRaw()方法来获取响应对象的原生对象,相关文档以及使用实例如下
    https://cn.vuejs.org/api/reactivity-advanced.html#toraw
const editor = ref(null)
let models = null
watchEffect(() => {debuggerif (editor.value && props.code) {models = toRaw(editor.value).getModel()debuggermodels?.setValue(props.code)}
})

通过toRaw处理之后,我们可以获取到原始对象,将对应的值赋值,正常显示
除此以外,我们还需要在组件卸载时,清空对应的编辑器实例,以减少不必要的性能浪费

http://www.lryc.cn/news/466413.html

相关文章:

  • 【某农业大学计算机网络实验报告】实验二 交换机的自学习算法
  • 燕山大学23级经济管理学院 10.18 C语言作业
  • 【880线代】线性代数一刷错题整理
  • 【C++语言】精妙的哈希算法:原理、实现与优化
  • 基于STM32的手势电视机遥控器设计
  • 2、图像的特征
  • URL、URN和URI的区别
  • 深入理解Spring框架几个重要扩展接口
  • 使用dotnet-counters和dotnet-dump 分析.NET Core 项目内存占用问题
  • 1282:最大子矩阵
  • C++编程语言:抽象机制:特殊运算符(Bjarne Stroustrup)
  • 图片无损放大工具Topaz Gigapixel AI v7.4.4 绿色版
  • Vue中计算属性computed—(详解计算属性vs方法Methods,包括案例+代码)
  • Python程序设计 内置函数 日志模块
  • 中标麒麟v5安装qt512.12开发软件
  • 每日算法一练:剑指offer——数组篇(3)
  • Java代码说明设计模式
  • Golang笔记_day06
  • 「从零开始的 Vue 3 系列」:第十一章——跨域问题解决方案全解析
  • C语言结构体数组 java静动数组及问题
  • uniapp项目结构基本了解
  • 常见Web知识1
  • 新版idea菜单栏展开与合并
  • 聊聊Go语言的异常处理机制
  • 复习:如何理解 React 中的 fiber
  • 10分钟了解腾讯云混元大模型AIGC系列产品
  • Unity发送Http
  • 微服务开发-Nacos服务治理
  • 鸿蒙开发:两个重磅更新,鸿蒙版微信要来了!
  • es kibana .logstash离线集群安装