react中CodeMirror (代码编辑器)

前言:

  实现一个在react项目中页面展示代码编辑器的效果。

codemirror:

  使用JavaScript为浏览器实现的多功能文本编辑器。codemirror作用:专门用于编辑代码,并带有实现更高级编辑功能的多种语言模式和附加组件

实现效果

1. 首先从react-codemirror2中引入Codemirror组件   

import {UnControlled as CodeMirror} from 'react-codemirror2'

2. 他的核心在于引入codemirror.js和codemirror.css

import 'codemirror/lib/codemirror.js'
import 'codemirror/lib/codemirror.css'

3.  codemirror的背景主题(可以设置自己喜欢的主题样式),同时他还需要在options里面设置theme:'yonce'

import 'codemirror/theme/yonce.css'

4. 引入一些代码模式

// 代码模式,clike是包含java,c++等模式的
import 'codemirror/mode/clike/clike'   
import 'codemirror/mode/javascript/javascript'   //js
import 'codemirror/mode/python/python.js'        //python

 5. 代码高亮和代码折叠

//代码高亮
import 'codemirror/addon/selection/active-line';
 
// 代码折叠
import 'codemirror/addon/fold/foldgutter.css'; 
import 'codemirror/addon/fold/foldcode.js';
import 'codemirror/addon/fold/foldgutter.js';  
import 'codemirror/addon/fold/brace-fold.js';  
import 'codemirror/addon/fold/comment-fold.js';

6、可以通过插件获取到simple和overlay两种,但是需要引入js和css,咋了好久才找到,分别是:

//代码滚动
import 'codemirror/addon/scroll/simplescrollbars.js'
import 'codemirror/addon/scroll/simplescrollbars.css'

渲染代码

 const {text} = this.state;//自己在state中定义初始代码编辑框中的值

<CodeMirror
                  id='scriptDesc'
                  editorDidMount={editor => { this.instance = editor; }}
                  value={text}
                  onChange={this.changeCode}
                  // eslint-disable-next-line no-return-assign
                  ref={(c) => this.myCodeMirror = c}// 添加ref属性获取dome节点
                  options = {{
                      lineNumbers: true, // 显示行号
                      mode: {name: 'text/x-java' || 'javascript'}, // 语言
                      autofocus: true, // 自动获取焦点
                      styleActiveLine: true, // 光标代码高亮
                      theme: 'yonce', // 主题
                      scrollbarStyle: 'overlay',
                      lineWrapping: true, // 代码自动换行
                      foldGutter: true,
                      gutters: ['CodeMirror-linenumbers', 'CodeMirrorfoldgutter'] // end
                  }}
              />

方法

  changeCode = (CodeMirror, changeObj, value) => {
      if (!value) return;
      // 获取 CodeMirror.doc.getValue()
      // 赋值 CodeMirror.doc.setValue(value) // 会触发 onChange 事件,小心进入无线递归。
      this.setState({text: value});
  };

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
首先,我们需要安装 `react-codemirror2` 和 `codemirror` 包: ``` npm install react-codemirror2 codemirror ``` 然后,我们可以在 React 组件使用 `CodeMirror` 组件来实现一个 Python 编辑器。以下是一个示例代码: ```jsx import React, { useState } from 'react'; import { Controlled as CodeMirror } from 'react-codemirror2'; import 'codemirror/lib/codemirror.css'; import 'codemirror/theme/material.css'; import 'codemirror/mode/python/python'; function PythonEditor() { const [code, setCode] = useState(''); const handleChange = (editor, data, value) => { setCode(value); }; return ( <CodeMirror value={code} onBeforeChange={handleChange} options={{ mode: 'python', theme: 'material', lineNumbers: true, }} /> ); } export default PythonEditor; ``` 在上面的代码,我们使用 `useState` Hook 来创建一个 `code` 状态变量,用于保存用户输入的 Python 代码。我们还定义了一个 `handleChange` 函数,用于在用户输入时更新 `code` 变量的值。 在 `return` ,我们使用 `CodeMirror` 组件来显示代码编辑器。我们将 `value` 属性设置为 `code` 变量的值,将 `onBeforeChange` 属性设置为 `handleChange` 函数,这样当用户输入时,`handleChange` 函数将被调用。我们还使用 `options` 属性来设置编辑器的一些选项,包括语言模式、主题和行号显示。 最后,我们将 `PythonEditor` 组件导出供其他组件使用。 希望这个示例能够帮助你实现一个 Python 编辑器
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值