monaco editor 在react中的使用

news2024/11/10 20:41:19

1. 首先先导入monaco editor

npm install monaco-editor

// npm install monaco-editor --force   // 版本冲突? 强行安装

2. 在react中使用

期望效果如下



3. 我遇到的问题 : 输入json数据后 未格式化 , json数据仍然一行展示

    我遇到的问题 : 直接输入json数据会白屏报错 

    我遇到的问题 :  直接更改编辑器中的代码时 只能一次输入一个字段


完整代码及解决方法如下
 

import * as monaco from 'monaco-editor' // 引入

----------js 部分------------------------- 

const editorRef = useRef(null)

const [code, setCode] = useState('console.log("Hello, world!");')

const debounce = (func, wait) => {   // 防抖更新代码状态的函数
    let timeout
    return (...args) => {
      clearTimeout(timeout)
      timeout = setTimeout(() => {
        func.apply(this, args)
      }, wait)
    }
}

const debouncedSetCode = useCallback(  // 防抖更新代码状态的函数
    debounce(newCode => {
      setCode(newCode)
    }, 300),
    []
)


useEffect(() => {
    if (!editorRef.current) {
      console.error('editorRef.current is null')
      return // 早期返回,避免创建编辑器
    }

    const editor = monaco.editor.create(editorRef.current, {
      value: code,
      language: 'json',
      theme: 'hc-black' // 主题可选: 'vs', 'vs-dark', 'hc-black'
    })

    // 编辑器内容可编辑
    editor.updateOptions({ readOnly: false })

    // 监听代码变化
    editor.onDidChangeModelContent(() => {
      // setCode(editor.getValue())   // 直接更改编辑器中的代码 只能更改一个字段
         debouncedSetCode(editor.getValue())  // 这样就能输入多字段了 
         hyy(editor.getValue())  // 一个不存在的方法名 居然也可以输入多字段 且不报错 不明白
    })

    // 格式化操作
    const formatAction = editor.getAction('editor.action.formatDocument')
    if (formatAction) {
      formatAction.run()
    }

    return () => {
      editor.dispose() // 组件卸载时销毁编辑器实例
    }
 }, [code])

  const formatJson = code => {           // 封装了一个格式化函数
    try {
      const parsedJson = JSON.parse(code)
      const prettyJson = JSON.stringify(parsedJson, null, 2)
      editorRef.current.setValue(prettyJson)
      setCode(prettyJson)
    } catch (error) {
      console.error('Formatting error:', error)
    }
  }

  useEffect(() => {
    let aaa = {
      messages: [
        {
          text: 'Hello, how are you?',
          files: []
        }
      ]
    }

    let newCode
    switch (activeKey2) {
      case '1':
        newCode = 'console.log("Hello, world!");'
        break
      case '2':
        newCode = '{title: hyy , dataIndex: age}'
        break
      case '3':
        newCode = JSON.stringify(aaa, null, 2)   // json转成字符串就不会报错了,且需加上null, 2 让其具备格式化样式
        break
      case '4':
        newCode = '{title: hyy 456 , dataIndex: age}'
        break
      default:
        newCode = 'console.log("Hello, world!");'
        break
    }

    // 更新代码并格式化
    setCode(newCode)
    formatJson(newCode) // 调用格式化函数
  }, [activeKey2])  



  const items2 = [
    {
      key: '1',
      label: '响应体'
    },
    {
      key: '2',
      label: '响应头'
    },
    {
      key: '3',
      label: '实际请求'
    },
    {
      key: '4',
      label: '提取'
    },
    {
      key: '5',
      label: '断言'
    }
  ]
  const [activeKey2, setActiveKey2] = useState('1') // 切换tabs

-----------html 部分----------------

   <Tabs
            defaultActiveKey='1'
            items={items2}
            onChange={key => setActiveKey2(key)}
          ></Tabs>
     <div
            ref={editorRef}
            style={{
              height: '500px',
              paddingTop: '20px',
              borderRadius: '10px'
            }}
    />


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2149852.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OSSEC搭建与环境配置Ubuntu

尝试使用Ubuntu配置了OSSEC&#xff0c;碰见很多问题并解决了&#xff0c;发表博客让后来者不要踩那么多坑 环境 &#xff1a; server &#xff1a;Ubuntu22.04 64位 内存4GB 处理器4 硬盘60G agent: 1.Windows11 64位 2.Ubuntu22.04 64位 服务端配置 一、配置安装依赖项&…

解决Python模块导入报错的问题

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 模块导入 📒📝 实际案例分享📝 解决方案📝 导入包的技巧和常见问题1. 导入包的技巧2. 常见问题及注意事项⚓️ 相关链接 ⚓️📖 介绍 📖 今天写Python代码的时候,遇到了一个模块导入报错的情况,这个问题不仅困扰了…

CDGA|怎样的数据治理状态才能被视为是良性发展的呢?

在当今这个数据驱动的时代&#xff0c;数据已成为企业最宝贵的资产之一&#xff0c;其质量、安全性和有效利用程度直接关系到企业的竞争力与可持续发展。因此&#xff0c;构建并维持一个良性的数据治理状态&#xff0c;对于企业而言至关重要。那么&#xff0c;怎样的数据治理状…

Linux中使用Docker容器构建Tomcat容器完整教程

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f427;Linux基础知识(初学)&#xff1a;点击&#xff01; &#x1f427;Linux高级管理防护和群集专栏&#xff1a;点击&#xff01; &#x1f510;Linux中firewalld防火墙&#xff1a;点击&#xff01; ⏰️创作…

高效分数查询系统助力管理班级

老师们的工作现在可太忙啦&#xff01;每天要做的事儿那叫一个繁杂。就说备课吧&#xff0c;得翻好多书&#xff0c;参考不同的教材&#xff0c;还得考虑每个学生的学习情况&#xff0c;想办法让课讲得有意思又能让学生学到东西。 从上课一开始怎么吸引学生&#xff0c;到中间每…

智慧交通,智能消防系统助力高铁站安全

智慧交通是一项基于现代技术的创新领域&#xff0c;正不断为我们生活带来便利。在智慧交通领域中&#xff0c;高铁站是一个非常重要的环节。高铁站作为人流密集的区域&#xff0c;安全问题一直备受关注。为了提升高铁站的安全性和效率&#xff0c;智慧消防设备监测与集中监控系…

20240919 - 【PYTHON】辞职信

import tkinter as tk # 导入 tkinter 模块&#xff0c;并简写为 tk from tkinter import messagebox # 从 tkinter 导入 messagebox 子模块&#xff0c;用于显示消息框 from random import random # 从 random 模块导入 random 函数&#xff0c;用于生成随机数# 创建窗口对…

ai写作软件排行榜前十名,5个软件帮助你快速使用ai写作

ai写作软件排行榜前十名&#xff0c;5个软件帮助你快速使用ai写作 AI写作软件已经成为许多人工作和创作中的重要工具&#xff0c;尤其是在快速生成内容、提高写作效率以及优化文本方面。以下是五款优秀的AI写作软件&#xff0c;它们能够帮助你轻松完成各种写作任务&#xff0c…

人力资源数据集分析(一)_t-test、卡方检验和描述性统计

数据入口&#xff1a;人力资源分析数据集 - Heywhale.com 数据说明 字段说明EmpID唯一的员工IDAge年龄AgeGroup年龄组Attrition是否离职BusinessTravel出差&#xff1a;很少、频繁、不出差DailyRate日薪Department任职部门&#xff1a;研发部门、销售部门、人力资源部门Dista…

文件防泄密软件哪个好?6款被夸爆的文件防泄密软件推荐!

滴水不漏&#xff0c;方显器量&#xff1b;信息无泄&#xff0c;乃见安防。 文件防泄密软件作为保护企业数据安全的重要工具&#xff0c;受到了越来越多企业的关注。 本文将为您推荐六款备受好评的文件防泄密软件&#xff0c;它们各具特色&#xff0c;功能强大&#xff0c;能…

C语言 结构体和共用体——枚举类型

目录 枚举数据类型 三问枚举数据类型 枚举数据类型 三问枚举数据类型

Ubuntu与Windows之间实现复制粘贴

1.卸载已有的工具 sudo apt-get autoremove open-vm-tools 2.安装工具open-vm-tools sudo apt-get install open-vm-tools 3.安装open-vm-tools-desktop sudo apt-get install open-vm-tools-desktop

Virtuoso服务在centos中自动停止的原因分析及解决方案

目录 前言1. 问题背景2. 原因分析2.1 终端关闭导致信号12.2 nohup命令的局限性 3. 解决方案3.1 使用 screen 命令保持会话3.2 使用 tmux 作为替代方案3.3 使用系统服务&#xff08;systemd&#xff09; 4. 其他注意事项4.1 网络配置4.2 日志监控 结语 前言 在使用Virtuoso作为…

Jenkins怎么设置每日自动执行构建任务?

在 Jenkins 中设置每日自动执行构建任务可以按照以下步骤进行&#xff1a; 一、安装必要插件 确保安装了 “Timestamper” 插件&#xff0c;这个插件可以为构建添加时间戳&#xff0c;方便查看构建的执行时间。 二、配置任务 打开需要设置每日自动执行的 Jenkins 任务。在 …

《线性代数》常用公式定理总结

文章目录 1 行列式1.1 克拉默法则1.2 基本性质1.3 余子式 M i j M_{ij} Mij​1.4 代数余子式 A i j ( − 1 ) i j ⋅ M i j A_{ij} (-1)^{ij} \cdot M_{ij} Aij​(−1)ij⋅Mij​1.5 具体型行列式计算&#xff08;化为基本型&#xff09;1.5.1 主对角线行列式&#xff1a;主…

C++ | 二叉搜索树

前言 本篇博客讲解c中的继承 &#x1f493; 个人主页&#xff1a;普通young man-CSDN博客 ⏩ 文章专栏&#xff1a;C_普通young man的博客-CSDN博客 ⏩ 本人giee: 普通小青年 (pu-tong-young-man) - Gitee.com 若有问题 评论区见&#x1f4dd; &#x1f389;欢迎大家点赞&…

【大模型】初识大模型(非常详细)零基础入门到精通,收藏这一篇就够了_大模型入门

大模型的定义 大模型是指具有数千万甚至数亿参数的深度学习模型。近年来&#xff0c;随着计算机技术和大数据的快速发展&#xff0c;深度学习在各个领域取得了显著的成果&#xff0c;如自然语言处理&#xff0c;图片生成&#xff0c;工业数字化等。为了提高模型的性能&#xf…

MeterSphere的一次越权审计

1 MeterSphere简介 MeterSphere是一个一站式开源持续测试平台&#xff0c;它提供了测试跟踪、接口测试、UI测试和性能测试等功能。它全面兼容JMeter、Selenium等主流开源标准&#xff0c;助力开发和测试团队实现自动化测试&#xff0c;加速软件的高质量交付。MeterSphere 的特点…

Java 微服务框架 HP-SOA v1.1.4

HP-SOA 功能完备&#xff0c;简单易用&#xff0c;高度可扩展的Java微服务框架。 项目主页 : https://www.oschina.net/p/hp-soa下载地址 : https://github.com/ldcsaa/hp-soa开发文档 : https://gitee.com/ldcsaa/hp-soa/blob/master/README.mdQQ Group: 44636872, 66390394…

解决selenium爬虫被浏览器检测问题

文章目录 专栏导读1.问题解析2.代码解析(Edge/Chrome通用)2.1 设置Edge浏览器选项:2.2 尝试启用后台模式2.3 排除启用自动化模式的标志2.4 禁用自动化扩展2.5 设置用户代理2.6 实例化浏览器驱动对象并应用配置2.7 在页面加载时执行JavaScript代码 3.完整代码&#xff08;可直接…