react-app框架——使用monaco editor实现online编辑html代码编辑器

文章目录

    • ⭐前言
      • 💖react系列文章
    • ⭐配置monaco-editor
      • 💖引入react-monaco-editor
      • 💖引入react-app-rewired
      • 💖通过config-overrides.js添加monaco插件配置
    • ⭐编辑代码的react页面配置
      • 💖扩展 可自定义配置语言
    • ⭐效果
    • ⭐总结
    • ⭐结束

yma16-logo

⭐前言

大家好,我是yma16,本文分享关于 react-app框架——使用monaco editor实现online编辑html代码编辑器。
monaco editor 编辑器
Monaco Editor是一款功能强大的Web编辑器,由微软开发并使用在多个项目中。它是基于VS Code编辑器的核心组件,具有类似的功能和用户体验。

Monaco Editor具有以下特点:

  1. 轻量级:Monaco Editor具有出色的性能,可以快速加载和渲染大型文件。
  2. 可定制性:用户可以通过添加自定义插件和主题来扩展和个性化编辑器。
  3. 强大的语法高亮:Monaco Editor支持多种编程语言,并提供了高亮显示和代码片段等功能。
  4. 智能代码补全:Monaco Editor具有智能的代码补全功能,可以根据上下文和类型推断提供准确的建议。
  5. 快速导航:用户可以使用快速导航功能跳转到特定的函数、变量或文件。
  6. 代码调试:Monaco Editor内置了代码调试功能,可以在编辑器中进行断点设置和调试代码。
  7. 多语言支持:Monaco Editor支持多种语言和框架,包括JavaScript、TypeScript、HTML、CSS等。

总的来说,Monaco Editor是一款功能丰富、高性能的Web编辑器,适用于开发人员、写作人员和其他需要进行文本编辑的用户。

💖react系列文章

next.js博客搭建_初始化next项目(第一步)
next.js博客搭建_登录注册(第二步)
next.js博客搭建_react-markdown渲染内容(第三步)

react-grapesjs——开源代码学习与修改(初出茅庐)
react搭建在线编辑html的站点——引入grapes实现在线拖拉拽编辑html
前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏

⭐配置monaco-editor

💖引入react-monaco-editor

安装依赖

yarn add react-monaco-editor

💖引入react-app-rewired

安装依赖

yarn add react-app-rewired

替换package.json的script运行命令

Replace react-scripts by react-app-rewired

替换script的运行命令
package.json

💖通过config-overrides.js添加monaco插件配置

在前端根目录中新建config-overrides.js添加插件的语言配置
config-overrides.js

//@ts-ignore
const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin');//@ts-ignore
module.exports = function override(config, env) {config.plugins.push(new MonacoWebpackPlugin({languages: ['html']}));return config;
}

⭐编辑代码的react页面配置

html代码编辑配置页面


// @ts-ignore
import { useEffect,useState, forwardRef, useImperativeHandle,useRef} from "react";
import {htmlLangConfig} from './const'
import {htmlString} from './html'import MonacoEditor,{ monaco }  from 'react-monaco-editor';function MonacoHtmlEditor(props:any,ref:any){const [content,setContent]=useState(htmlString)const iframeRef=useRef<HTMLElement|any>(null)const options={disableLayerHinting: true}const renderIframe=(htmlContent:string)=>{if(iframeRef?.current?.contentDocument?.body){//@ts-ignoreiframeRef.current.contentDocument.body.innerHTML=htmlContent}}const onChange=(value:string)=>{setContent(value)renderIframe(value)}const onEditorDidMount=(editor: any, monaco: any) => {// 格式化editor.getAction('editor.action.formatDocument').run()console.log('format')}useEffect(()=>{if(iframeRef&&iframeRef.current){console.log('iframeRef.current',iframeRef.current)console.log('iframeRef.current.contentWindow',iframeRef.current.contentWindow)renderIframe(htmlString)}},[])useImperativeHandle(ref, () => ({getHtml:()=>content}))// @ts-ignorereturn <><div style={{display:'flex'}} id='monaco_html_id'><div style={{flex:1,textAlign:"left"}}><MonacoEditorwidth="100%"height="600"language="html"value={content}onChange={onChange}options={options}editorDidMount={onEditorDidMount}/></div><div style={{flex:1}}><iframe ref={iframeRef} style={{width:'100%',height:'600px'}}/></div></div></>
}export default forwardRef(MonacoHtmlEditor)

💖扩展 可自定义配置语言

可以通过monaco配置语言

import { monaco }  from 'react-monaco-editor';
monaco.languages.register({id:'语言'})
// @ts-ignore
monaco.languages.setMonarchTokensProvider('语言',配置项);

语言的配置项可以参考官方文档
https://microsoft.github.io/monaco-editor/monarch.html
lang-set

⭐效果

预览地址:https://yongma16.xyz/react-mjml/
编辑器的效果如下
包括三个基础功能

  1. 代码高亮
  2. 代码内容格式化
  3. 内容预览
    editor-style
    动态图
    gif-editor

⭐总结

monaco-editor
monaco-editor使用简单,拿来就能用,对于新手十分友好。

config-overrides
config-overrides文件是用于定制create-react-app脚手架配置的JavaScript模块。通过这个文件,可以对Webpack配置进行修改和扩展,实现自定义的配置。
在config-overrides.js文件中,你可以使用react-app-rewired库提供的API对create-react-app的原始配置进行修改。例如,你可以通过修改webpack配置,添加自定义的loader、plugin、alias等。

⭐结束

本文分享到这结束,如有错误或者不足之处欢迎指出!

sky

👍 点赞,是我创作的动力!
⭐️ 收藏,是我努力的方向!
✏️ 评论,是我进步的财富!
💖 最后,感谢你的阅读!

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

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

相关文章

Salesforce生成式AI聊天机器人「Einstein Copilot」,将于2月发布!

Spring 24宣布&#xff0c;期待已久的Einstein Copilot将于2024年2月落地Salesforce。该生成式AI聊天机器人将用于整个Salesforce产品套件&#xff0c;帮助企业做出更明智的决策&#xff0c;从而改善客户体验。 Einstein Copilot应用于CRM应用程序中&#xff0c;智能回应任何用…

.net core 6 使用注解自动注入实例,无需构造注入 autowrite4net

像java使用autowrite一样使用 1、前提先注册到ioc容器当中 builder.Services.AddScoped 2、nuget引入AutoWrite4Net 3、启用 //启用自动注入 app.UseAutoWrite(); 4、在类上使用注解 [StartAutoWrite] public class NacosController : ControllerBase 5、实例上使用注解 …

2.mac 安装 Visual studio code 整合go开发

目录 概述前置下载关键命令整合C#go配置go插件常见的go工具安装测试 结束 概述 mac 安装 Visual studio code 整合go开发 相关前置文章 go安装及相关配置 文章 前置 官网速递 mac 系统高于等于 10.15.x 可以直接最新版本 我的系统是 10.13 &#xff0c;所以只能安装此版本…

Kubernetes网络模型概述

Kubernetes网络模型设计的一个基础原则是&#xff1a;每个Pod都拥有一个独立的IP地址&#xff0c;并假定所有Pod都在一个可以直接连通的、扁平的网络空间中。所以不管这些Pod是否运行在同一个Node中&#xff0c;都要求它们可以直接通过对方的IP进行访问。由于Kubernetes的网络模…

Redis服务端优化(持久化配置、慢查询、命令及安全配置、内存配置)

文章目录 持久化配置慢查询命令及安全配置内存配置 持久化配置 慢查询 命令及安全配置 漏洞&#xff1a;Redis未授权访问配合SSH key文件利用分析-腾讯云开发者社区-腾讯云 (tencent.com) 漏洞出现的核心的原因有以下几点 Redis未设置密码利用了Redis的config set命令动态修…

python数字图像处理基础(五)——Canny边缘检测、图像金字塔、图像分割

目录 Canny边缘检测原理步骤 图像金字塔1.高斯金字塔2.拉普拉斯金字塔 图像分割图像轮廓检测1.检测轮廓2.绘制轮廓3.补充 Canny边缘检测 梯度是什么? 梯度就是变化的最快的那个方向 edge cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient ]]…

Codeforce s Round 920 (Div. 3) G题 旋转矩阵,斜缀和,平移

Problem - G - Codeforces 目录 题意&#xff1a; 思路&#xff1a; 总思路&#xff1a; 旋转矩阵&#xff1a; 前缀和预处理&#xff1a; 平移的处理&#xff0c;尤其是越界的处理&#xff1a; 核心代码&#xff1a; 题意&#xff1a; 给你个n*m的矩阵&#xff0c;里…

[自动化分布式] Zabbix自动发现与自动注册

abbix 自动发现&#xff08;对于 agent2 是被动模式&#xff09; zabbix server 主动的去发现所有的客户端&#xff0c;然后将客户端的信息登记在服务端上。 缺点是如果定义的网段中的主机数量多&#xff0c;zabbix server 登记耗时较久&#xff0c;且压力会较大 部署 添加zabb…

漏洞扫描的原理是什么,分为几个阶段进行

网络漏洞扫描主要通过扫描已知的网络缺陷、不正确的网络设置和过时的网络应用版本来检测漏洞。漏洞扫描主要分为哪三个阶段&#xff1f;对于企业来说&#xff0c;创建持续监控容器并查找安全漏洞的服务。 漏洞扫描的原理 一、信息收集 漏洞扫描器首先会收集目标系统的相关信息…

javacv和opencv对图文视频编辑-裸眼3D图片制作

通过斗鸡眼&#xff0c;将左右两张相似的图片叠加到一起看&#xff0c;就会有3D效果。 3D图片&#xff0c;3D眼镜&#xff0c;3D视频等原理类似&#xff0c;都是通过两眼视觉差引起脑补产生3D效果。 图片&#xff1a; 图片来源&#xff1a; 一些我拍摄的真*裸眼3D照片 - 哔哩…

1114: 逆序(数组)

题目描述 输入n&#xff08;1<n<10&#xff09;和n个整数&#xff0c;逆序输出这n个整数。 输入 输入n&#xff08;1<n<10&#xff09;&#xff0c;然后输入n个整数。 输出 逆序输出这n个整数&#xff0c;每个整数占4列&#xff0c;右对齐。 样例输入 6 4 5…

Leetcode:128. 最长连续序列

128. 最长连续序列 乍一看感觉很简单&#xff0c;一看要用O(n)??? 因为我觉得题目很难而且题目看起来很简单&#xff0c;感觉以后会用到&#x1f606;&#xff0c;做个记录 1.朴素做法 思路 答:任何一段连续的数都有一个左端点&#xff1a;比如&#xff08;1&#xff0c;…

Android车载系统Car模块架构链路分析

一、模块主要成员 CarServiceHelperService SystemServer 中专门为 AAOS 设立的系统服务&#xff0c;用来管理车机的核心服务 CarService。该系统服务的具体实现在 CarServiceHelperServiceUpdatableImpl CarService Car模块核心服务APP&#xff0c;Android 13版本开始分为…

Qt纯代码实现UI界面

1.相关信息 设置编辑框内容的字体样式&#xff0c;包括加粗、下划线、斜体、蓝色、红色、黑色 2.界面展示 3.相关代码 #include "dialog.h" #include <QHBoxLayout> #include <QVBoxLayout> #include <QCheckBox> #include <QRadioButton> …

commvault学习(5):在linux上安装cv客户端

我的环境&#xff1a; 服务器&#xff08;同时装有CS、MA&#xff09;&#xff1a;windows server2008r2 客户端&#xff1a;两台centos7 1.为两台centos7配置静态ip 使得2者可以与服务器ping通 2.在两台centos7上预留出足够大的磁盘空间以存放安装文件 我是在/mnt下创建了…

软件测试|使用matplotlib绘制箱型图

简介 绘制箱型图&#xff08;Box Plot&#xff09;是一种常用于可视化数据分布的方法&#xff0c;它可以显示数据的中位数、四分位数、异常值等统计信息。Matplotlib 是一个强大的 Python 数据可视化库&#xff0c;可以轻松绘制箱型图。在本文中&#xff0c;我们将介绍如何使用…

推荐五款超好用的AI写作自动生成器给你

随着人工智能技术的不断发展&#xff0c;AI写作自动生成器成为了现代写作的新宠。这些智能工具能够帮助我们快速生成高质量的文章&#xff0c;节省时间和精力。在本文中&#xff0c;我将向大家推荐五款超好用的AI写作自动生成器&#xff0c;希望能够为你的写作工作带来便利和效…

服务器数据恢复—OceanStor存储raid5热备盘同步数据失败的数据恢复案例

服务器数据恢复环境&#xff1a; 华为OceanStor某型号存储&#xff0c;存储内有一组由24块硬盘组建的raid5阵列&#xff0c;配置1块热备盘。 服务器故障&#xff1a; 该存储raid5阵列中有一块硬盘离线&#xff0c;热备盘自动激活并开始同步数据&#xff0c;在热备盘同步数据的…

Docker(一)简介和基本概念

一、简介 本章将带领你进入 Docker 的世界。 什么是 Docker&#xff1f; 用它会带来什么样的好处&#xff1f; 好吧&#xff0c;让我们带着问题开始这神奇之旅。 1.什么是 Docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目&…

【文档数据库】ES和MongoDB的对比

目录 1.由文档存储牵出的问题 2.什么是MongoDB&#xff1f; 3.ES和MongoDB的对比 1.由文档存储牵出的问题 本文或者说关于mongodb的这个系列文章的源头&#xff1a; 前面我们聊过了分布式链路追踪系统&#xff0c;在基于日志实现的分布式链路追踪的方式seluthzipkin中为了…