react开发嵌入react-monaco-editor代码编辑器的方法

news2024/11/16 11:55:14

Next.js中使用react开发嵌入react-monaco-editor代码编辑器的方法(支持语法高亮)

安装

(base) PS D:\ai-ui> npm install react-monaco-editor

added 1 package, changed 1 package, and audited 1030 packages in 6s

273 packages are looking for funding
  run `npm fund` for details

1 high severity vulnerability

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

定义组件

'use client'

import React, { useEffect, useRef } from 'react';

import * as monaco from 'monaco-editor';

const CodeEditor = ({ code, language, onChange, theme }) => {
    const editorRef = useRef(null);

    useEffect(() => {
        const editor = monaco.editor.create(editorRef.current, {
            value: code,
            language: language,
            theme: theme,
            lineNumbers: 'on',
            lineDecorationsWidth: 10,
            lineNumbersMinChars: 3,
            fontSize: 16,
            fontFamily: 'Consolas, "Courier New", monospace',
            automaticLayout: true,
            minimap: {
                enabled: false,
            },
            scrollBeyondLastLine: false,
            scrollbar: {
                vertical: 'hidden',
                horizontal: 'hidden',
            },
            wordWrap: 'on',
        });

        editor.onDidChangeModelContent(() => {
            onChange(editor.getValue());
        });
        // 组件卸载时销毁编辑器
        return () => {
         editor.dispose();
        };
    }, [theme,language]);

    return <div ref={editorRef} style={{ height: '80%', width: '1000px'}} />;
};

export default CodeEditor;

组件使用:

import {Typography, Flex, Row, Col, Space, Input, message, Button, Dropdown, Select} from 'antd';


export default function Page() {
    const [code, setCode] = useState<string>('');
    const [language, setLanguage] = useState<string>('python');
    const [theme, setTheme] = useState<string>('vs-light');

    const handleCodeChange = (value: string) => {
        setCode(value);
    };

    const handleChangeLanguage = (value: string) => {
        setLanguage(value);
        console.log(`selected ${value}`);
    };

    const handleChangeTheme = (value: string) => {
        setTheme(value)
        console.log(`selected ${value}`);
    };

	//......

 return (
     <>
         
         <Flex vertical={true} style={{width: '100%', backgroundColor: '#dfdffa', borderRadius: '10px'}}>
            <Space wrap={true}>
                <Select defaultValue={'python'}
                    style={{width: 100}}
                    onChange={handleChangeLanguage}
                    options={[
                        {
                            value: 'python',
                            label: 'python',
                        },
                        {
                            value: 'java',
                            label: 'java',
                        },
                        {
                            value: 'c++',
                            label: 'c++',
                        },
                        {
                            value: 'go',
                            label: 'golang',
                        },
                        {
                            value: 'c',
                            label: 'c',
                        },
                        {
                            value: 'javascript',
                            label: 'javascript',
                        },
                        {
                            value: 'json',
                            label: 'json',
                        },
                    ]}
                    />
                <Select defaultValue={'vs-light'}
                    style={{width: 100}}
                    onChange={handleChangeTheme}
                    options={[
                        {
                            value: 'vs-light',
                            label: 'vs-light',
                        },
                        {
                            value: 'vs-dark',
                            label: 'vs-dark',
                        },
                        {
                            value: 'hc-black',
                            label: 'vs-black',
                        },
                    ]}
                    />
            </Space>
            <CodeEditor code={code} language={language} onChange={handleCodeChange} theme={theme}/>
            <pre>{"以下是执行代码的结果:"}</pre>
        </Flex>
   </>
 )   


效果:
在这里插入图片描述

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

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

相关文章

qt for android 工程添加AndroidManifest.xml 文件

1.选择左边图形栏目中的Projects&#xff0c;在Build steps下的Build Android APK中Details 2.点击Create Templates&#xff0c;并勾选 此时在工程下面会多出一个文件夹android 3.将这个android的中所有文件加入工程中&#xff0c;编辑.pro 4.通过QT 图形化编辑设置属性&#…

深入理解计算机系统 CSAPP 家庭作业7.8

A:a main1 b main2 B:a 未知 b 未知 C:a 错误 b 错误

Qt客户案例 | 西门子医疗-满足最高要求的医疗软件和源代码检查的架构合规性

西门子医疗是全球领先的医疗技术公司之一&#xff0c;在70多个国家拥有约66&#xff0c;000位员工。除其他产品以外&#xff0c;他们还为诊断和治疗成像、实验室诊断和分子医学等领域提供产品。公司在全球各地的开发者设计、开发和维护这些产品的软件。为了让这个分布式团队持续…

基于 Spring Boot 的健康咨询系统

1 项目介绍 1.1 摘要 本项目旨在通过构建一个对用户更加友好的健康咨询平台&#xff0c;帮助用户方便、快捷地获取专业并且准确的健康咨询服务&#xff0c;同时为医疗机构提供一个高效易用的可以提供信息管理的服务平台。 项目采用了Spring Boot框架作为主要的开发平台。本系…

黑马苍穹外卖8 Spring Task+WebSocket 来单提醒和客户催单

Spring Task Spring提供的任务调度工具&#xff0c;按照约定时间自动执行代码。【以前的都是基于请求(http)响应的】 cron表达式 通过cron表达式可以定义任务触发时间。 cron表达式生成器 &#xff08;1&#xff09;导入spring-context &#xff08;2&#xff09;EnableSc…

IEEE-Trans系列!版面稀缺,现在投稿可加急处理,代表作神刊!

【SciencePub学术】今天小编给大家推荐一本计算机领域的SCI&#xff0c;隶属于IEEE出版社旗下&#xff0c;现已稳定检索49年&#xff01;影响因子4.0-5.0之间&#xff0c;JCR1区&#xff0c;中科院2区&#xff0c;质量口碑甚誉&#xff01; 有论文发表需求的学者可以后台联系张…

加速业务布局,30年老将加盟ATFX,掌舵运营新篇章

全球领先的差价合约经纪商ATFX日前宣布了一项重大人事任命&#xff0c;聘请业界资深人士约翰博格(John Bogue)为机构业务运营总监。约翰博格是一名行业老将&#xff0c;曾在差价合约界深耕三十余载。伴随其加入ATFX&#xff0c;相信他的深厚专业知识和从业经验将为ATFX机构业务…

视频云计算的未来发展趋势:智能化、个性化与云端协同助力智慧城市安防监控

随着信息技术的飞速发展&#xff0c;云计算作为一种全新的服务模式&#xff0c;正在改变我们处理数据和信息的方式。而视频云计算技术&#xff0c;作为云计算领域的一个重要分支&#xff0c;以其独特的优势&#xff0c;正在逐步渗透到我们生活的各个领域。 一、视频云计算技术…

祝贺:东兴朱雀桥成为一点点的NFC果汁供应商。

东兴朱雀桥进出口&#xff1a;品质之选&#xff0c;护航一点点奶茶的成长&#xff01; 据记者了解&#xff0c;该家公司是专注于进口越南特色NFC果汁&#xff1a;薇妮她VINUT人参果汁饮料的研发与生产&#xff0c;以其丰富的产品线和卓越品质&#xff0c;成为了行业内的佼佼者…

多用户商城进销存管理如何处理?

竞争激烈的市场环境&#xff0c;多用户商城管理是一项复杂而具有挑战性的任务。特别是在进销存&#xff08;进货、销售、库存&#xff09;管理方面&#xff0c;面对多用户商城的复杂结构&#xff0c;传统的手动操作已经难以满足高效和准确的需求。因此&#xff0c;借助现代化的…

自动驾驶系统功能安全解决方案解析

电信、公用事业、运输和国防等关键基础设施服务需要定位、导航和授时&#xff08;PNT&#xff09;技术来运行。但是&#xff0c;广泛采用定位系统&#xff08;GPS&#xff09;作为PNT信息的主要会引入漏洞。 在为关键基础设施制定PNT解决方案时&#xff0c;运营商必须做出两个…

Ubuntu使用apt-get指令下载

一、前言 本节来学习 ubuntu 中的 apt-get 命令&#xff0c;ubuntu 为什么而闻名&#xff1f;第一&#xff0c; ubuntu 有一个非常好的图形界面&#xff0c;第二就是 ubuntu 的 apt-get 功能强大。 什么是 apt-get 呢&#xff0c;在 windows 上安装软件&#xff0c;大家一定都…

使用c++栈刷题时踩坑的小白错误

根据图片中提供的代码&#xff0c;可以发现以下三处错误&#xff1a; 错误原因&#xff1a;条件判断语句的逻辑错误。 代码行&#xff1a;if (res.top() ! e || res.empty())&#xff08;第7行&#xff09; 问题&#xff1a;如果 res 为空&#xff08;res.empty() 为 true&…

已解决javax.xml.datatype.DatatypeConfigurationException异常的正确解决方法,亲测有效!!!

已解决javax.xml.datatype.DatatypeConfigurationException异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 出现问题的场景 示例场景 报错原因 解决思路 解决方法 分析错误日志 检查类路径 验证自定义实现类 检查系统属…

怎么实现微信支付?

微信小程序中微信支付&#xff08;前端流程&#xff09; 微信支付前准备工作 微信公众平台绑定商户号 微信支付平台配置好后端信息支付前要有用户的openid 1. 客户端点击支付按钮 在用户点击支付按钮时&#xff0c;触发支付流程。 // 绑定支付按钮点击事件 function onPayB…

【PC端】魔力宝贝服务端+登录器源码+配套网站+后台

配套源码 启动也很简单 一共两部 下载地址 www.t1gm.com 下面上图

itsm服务管理工具有哪些?

itsm&#xff08;IT服务管理&#xff09;是现代企业管理IT服务的关键框架&#xff0c;可帮助组织提供高效的IT服务&#xff0c;并确保业务持续运行。使用itsm服务管理工具是实现这一目标的关键&#xff0c;下面我们来看看itsm服务管理工具有哪些&#xff1a; 1. ServiceDesk Pl…

Stable Diffusion 亲测这几个SDXL大模型,真的非常好用!

大家好我是极客菌&#xff0c;前两周Stable Diffusion WebUI1.6.0发布了&#xff0c;新增了很多对SDXL生态的支持。 而ControlNET也对SDXL的支持也逐渐稳定。 SDXL的生态终于有一点起色了&#xff0c;我也觉得是时候&#xff0c;可以来写一篇SDXL的大模型推荐了。 在推荐之前…

云层区分神经网络模型——二分类

云层区分神经网络模型——二分类 问奶奶&#xff0c;是什么让他们维护一份感情长达年&#xff0c;奶奶说那个年代什么东西坏了都会想要修&#xff0c;现在什么坏了都想着换。 安装依赖 # 要运行脚本&#xff0c;请先安装以下库&#xff1a;pip install tensorflowpip install …

uniapp——上传图片获取到file对象而非临时地址——基础积累

最近在看uniapp的代码&#xff0c;遇到一个需求&#xff0c;就是要实现上传图片的功能 uniapp 官网地址&#xff1a;https://uniapp.dcloud.net.cn/ 上传图片有对应的API&#xff1a; uni.chooseImage方法&#xff1a;https://uniapp.dcloud.net.cn/api/media/image.html#choo…