位置: IT常识 - 正文

React中CodeMirror插件的使用及封装(react img onerror)

编辑:rootadmin
React中CodeMirror插件的使用及封装

目录

一、CodeMirror是什么

二、React中CodeMirror的基本使用介绍

(一)引入CodeMirror

1. 安装CodeMirror插件

2.引入 CodeMirror 插件

(二)引入文件配置

(三)关键属性解读

1.value

2.mode

3.theme

4.readOnly

5.options

(四)CodeMirror内容更新

三、CodeMirror的封装详解


一、CodeMirror是什么

推荐整理分享React中CodeMirror插件的使用及封装(react img onerror),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:react import,react-content-loader,react import,react 代码,react code,react code,react-codemirror2,react-codemirror2,内容如对您有帮助,希望把文章链接给更多的朋友!

        在前端交互丰富的业务场景中,难免会遇到需要编译器的情况。CodeMirror是一个代码编辑器组件,可以嵌入到Web页面中。用来满足代码书写的交互场景。

        例如:

二、React中CodeMirror的基本使用介绍

详细的中文文档参考博客:CodeMirror用户手册_LingMax2013的博客-CSDN博客_codemirror中文文档

英文文档参考官网:

React中CodeMirror插件的使用及封装(react img onerror)

 CodeMirror 5 User Manual

(一)引入CodeMirror1. 安装CodeMirror插件

npm install codemirror react-codemirror2 --save      //安装CodeMirror

2.引入 CodeMirror 插件import CodeMirror from 'react-codemirror';(二)引入文件配置require('codemirror/lib/codemirror.css');//关键信息引入require('codemirror/theme/seti.css');//引入主题颜色require('codemirror/addon/display/fullscreen.css');require('../../styles/codemirror.less');//引入样式require('codemirror/addon/display/panel');require('codemirror/mode/xml/xml');//引入编辑语言 xmlrequire('codemirror/mode/javascript/javascript');//引入编辑语言 JavaScriptrequire('codemirror/mode/yaml/yaml');//引入编辑语言 yamlrequire('codemirror/addon/display/fullscreen');require('codemirror/addon/edit/matchbrackets');require ('codemirror/addon/selection/active-line');//代码高亮require ('codemirror/addon/fold/foldgutter.css'); // 代码折叠require ('codemirror/addon/fold/foldcode.js');// 代码折叠require ('codemirror/addon/fold/foldgutter.js'); // 代码折叠require ('codemirror/addon/fold/brace-fold.js'); // 代码折叠require ('codemirror/addon/fold/comment-fold.js');// 代码折叠(三)关键属性解读1.value

        作为插件的初始值,写入命令行内。

2.mode

        作为鉴定输入文本框的文本类型,如JavaScript和yaml文件。

3.theme

        引入的主题。

4.readOnly

        设置为是否可读。

5.options

        各类配置的集合,作为属性传入CodeMirror插件之中

(四)CodeMirror内容更新

        调用官方文档中的setValue方法,具体可查看官方文档。

        先获取dom节点,通过ref或者设置id拿到真实的dom节点,在通过dom.setValue设置新的内容。

//使用引入的codemirror组件 <CodeMirror options={options} value={text ? text :"-" } ref={(c) => this.myCodeMirror = c}//添加ref属性获取dome节点 />//通过点击事件获取新的内容 showDrawer = (val) => { if (this.myCodeMirror != (undefined || null)){ const editor = this.myCodeMirror.getCodeMirror(); editor.setValue(val) } this.setState({ showDrawerswitch: !this.state.showDrawerswitch }) }三、CodeMirror的封装详解import { Upload } from 'antd';import React, { PureComponent } from 'react';import CodeMirror from 'react-codemirror';import apiconfig from '../../../config/api.config';import cookie from '../../utils/cookie';import globalUtil from '../../utils/global';import styles from './index.less';require('codemirror/lib/codemirror.css');require('codemirror/theme/seti.css');require('codemirror/addon/display/fullscreen.css');require('../../styles/codemirror.less');require('codemirror/addon/display/panel');require('codemirror/mode/xml/xml');require('codemirror/mode/javascript/javascript');require('codemirror/mode/yaml/yaml');require('codemirror/addon/display/fullscreen');require('codemirror/addon/edit/matchbrackets');// eslint-disable-next-line react/no-redundant-should-component-updateclass CodeMirrorForm extends PureComponent { constructor(props) { super(props); this.state = { fullScreen: false }; this.CodeMirrorRef = ''; } componentWillReceiveProps(nextProps) { const { name, data, setFieldsValue } = this.props; const { CodeMirrorRef } = this; if (data !== nextProps.data && CodeMirrorRef) { setFieldsValue({ [name]: nextProps.data }); if (CodeMirrorRef) { const editor = CodeMirrorRef.getCodeMirror(); editor.setValue(nextProps.data); } } } saveRef = ref => { this.CodeMirrorRef = ref; const { saveRef = false } = this.props; if (saveRef) { saveRef(ref); } }; handleChangeUpload = info => { const { beforeUpload } = this.props; if (beforeUpload) { if (beforeUpload(info.file, false)) { this.handleFile(info); } return null; } return this.handleFile(info); }; handleFile = info => { let fileList = [...info.fileList]; if (fileList.length > 0) { fileList = fileList.slice(-1); this.readFileContents(fileList, 'file_content'); } }; readFileContents = fileList => { let fileString = ''; const { CodeMirrorRef } = this; const { name, setFieldsValue } = this.props; for (let i = 0; i < fileList.length; i++) { const reader = new FileReader(); // 新建一个FileReader reader.readAsText(fileList[i].originFileObj, 'UTF-8'); // 读取文件 // eslint-disable-next-line no-loop-func reader.onload = evt => { // 读取完文件之后会回来这里 fileString += evt.target.result; // 读取文件内容 setFieldsValue({ [name]: fileString }); if (CodeMirrorRef) { const editor = CodeMirrorRef.getCodeMirror(); editor.setValue(fileString); } }; } }; checkValue = (_, value, callback) => { const { message } = this.props; if (value === '' || !value || (value && value.trim() === '')) { callback(message); return; } callback(); }; render() { const { Form, getFieldDecorator, formItemLayout, data, label, name, message, width: proWidth, mode, action, beforeUpload, isHeader = true, isUpload = true, isAmplifications = true, disabled = false, titles, bg = '#333', help } = this.props; const { fullScreen } = this.state; let defaultFullScreenStyle = { display: 'flex', justifyContent: 'space-between', cursor: 'pointer', top: '0', textAlign: 'left', background: bg, lineHeight: '1px', padding: '9px 0 6px 0' }; if (fullScreen) { defaultFullScreenStyle = Object.assign(defaultFullScreenStyle, { position: 'fixed', right: '5px', width: '100%', zIndex: 99 }); } else { defaultFullScreenStyle = Object.assign(defaultFullScreenStyle, { position: 'absolute', width: proWidth || '100%', zIndex: 4 }); } const options = { mode: { name: mode || 'javascript', json: true }, lineNumbers: true, theme: 'seti', fullScreen, lineWrapping: true, smartIndent: true, matchBrackets: true, scrollbarStyle: null, showCursorWhenSelecting: true, readOnly: disabled }; const token = cookie.get('token'); const amplifications = ( <span style={{ margin: '0 20px' }} onClick={() => { this.setState({ fullScreen: !this.state.fullScreen }); }} > {globalUtil.fetchSvg('amplifications')} </span> ); return ( <Form.Item {...formItemLayout} label={label} help={help && <span style={{ color: 'red' }}>{help}</span>} className={ fullScreen ? `${styles.fullScreens} ${styles.childrenWidth}` : styles.childrenWidth } > {getFieldDecorator(name, { initialValue: data || '', rules: [{ required: true, validator: this.checkValue }] })(<CodeMirror options={options} ref={this.saveRef} />)} {amplifications} {isHeader && ( <div style={defaultFullScreenStyle}> <div style={{ lineHeight: '20px', paddingLeft: '30px', color: '#fff' }} > {titles || ''} </div> <div> {isUpload && ( <Upload action={ action || `${apiconfig.baseUrl}/console/enterprise/team/certificate` } showUploadList={false} withCredentials headers={{ Authorization: `GRJWT ${token}` }} beforeUpload={beforeUpload || false} onChange={this.handleChangeUpload} > {globalUtil.fetchSvg('uploads')} </Upload> )} {isAmplifications && amplifications} </div> </div> )} </Form.Item> ); }}export default CodeMirrorForm;
本文链接地址:https://www.jiuchutong.com/zhishi/283670.html 转载请保留说明!

上一篇:kpf4gui.exe是什么进程 有什么用 kpf4gui进程查询(kpk是什么文件)

下一篇:inicio.exe是什么文件产生的进程 inicio进程有什么作用(.ini是什么类型文件?)

  • 【公证委托书】成都房产公证委托书怎么写(公证委托书模板)

    【公证委托书】成都房产公证委托书怎么写(公证委托书模板)

  • win10卸载软件在哪里(win10卸载程序在哪里)

    win10卸载软件在哪里(win10卸载程序在哪里)

  • 笔记本硬盘坏了症状(笔记本硬盘坏了怎么修复)

    笔记本硬盘坏了症状(笔记本硬盘坏了怎么修复)

  • vivo手机自带gms吗(ViVO手机自带天气预报)

    vivo手机自带gms吗(ViVO手机自带天气预报)

  • 华为nova7pro支持无线充电吗(华为nova7pro支持5G吗)

    华为nova7pro支持无线充电吗(华为nova7pro支持5G吗)

  • word表格没有边框线怎么调(word表格没有边界)

    word表格没有边框线怎么调(word表格没有边界)

  • 华为移动数据按钮灰色(华为移动数据按键在哪)

    华为移动数据按钮灰色(华为移动数据按键在哪)

  • 拼多多质量问题退货不肯出邮费怎么办(拼多多质量问题包退是无理由退货吗)

    拼多多质量问题退货不肯出邮费怎么办(拼多多质量问题包退是无理由退货吗)

  • 笔记本风扇加油孔在哪(笔记本风扇加油位置)

    笔记本风扇加油孔在哪(笔记本风扇加油位置)

  • 苹果无线耳机能用几个小时(苹果无线耳机能连接电脑吗)

    苹果无线耳机能用几个小时(苹果无线耳机能连接电脑吗)

  • 14寸和15.6寸实物对比(14寸和15.6寸价格一样)

    14寸和15.6寸实物对比(14寸和15.6寸价格一样)

  • 淘宝买的东西出现质量问题怎么解决呢(淘宝买的东西出现质量问题怎么解决呢,时间也过了)

    淘宝买的东西出现质量问题怎么解决呢(淘宝买的东西出现质量问题怎么解决呢,时间也过了)

  • 键盘分为哪五个区(键盘分为哪五个部分)

    键盘分为哪五个区(键盘分为哪五个部分)

  • air2能用apple pencil吗(Air2能用几年)

    air2能用apple pencil吗(Air2能用几年)

  • tws和牙耳蓝机区别(蓝牙耳机的蓝牙配对和tws配对)

    tws和牙耳蓝机区别(蓝牙耳机的蓝牙配对和tws配对)

  • b450主板适合什么cpu(b450主板选哪个)

    b450主板适合什么cpu(b450主板选哪个)

  • sos紧急呼叫怎么关掉(sos紧急呼叫怎么设置oppo)

    sos紧急呼叫怎么关掉(sos紧急呼叫怎么设置oppo)

  • 苹果手机呼入限制怎么解除(苹果手机呼入限制怎么关闭)

    苹果手机呼入限制怎么解除(苹果手机呼入限制怎么关闭)

  • 微信拉黑发消息对方能收到吗(微信拉黑发消息会显示什么)

    微信拉黑发消息对方能收到吗(微信拉黑发消息会显示什么)

  • 微信群删掉了在哪里找(微信群我删除了怎么在微信里找?)

    微信群删掉了在哪里找(微信群我删除了怎么在微信里找?)

  • 手机应用在哪里找(op手机应用在哪里)

    手机应用在哪里找(op手机应用在哪里)

  • qq可以群发消息吗(消息群发app)

    qq可以群发消息吗(消息群发app)

  • 王者荣耀中扁鹊技能有哪些?(王者荣耀中扁鹊的克星是谁)

    王者荣耀中扁鹊技能有哪些?(王者荣耀中扁鹊的克星是谁)

  • Win10设备配频繁蓝屏提示"CorsairVBusDriver.sys"的解决办法(windows设备超时是什么意思)

    Win10设备配频繁蓝屏提示"CorsairVBusDriver.sys"的解决办法(windows设备超时是什么意思)

  • rndc命令  控制DNS服务器的操作(dns管理控制台在哪里)

    rndc命令 控制DNS服务器的操作(dns管理控制台在哪里)

  • 购买汽车的印花税要计入汽车原值吗
  • 普票和增值税发票的区别
  • 红冲的发票能不能取消
  • 房屋出租收入会计分录
  • 前一年的未分配利润属于什么科目
  • 股权转让1元转让
  • 出售使用过的固定资产
  • 预缴增值税是否适用一般计税方法
  • 个税专项附加扣除
  • 应收账款计提坏账准备是谨慎性原则吗
  • 预缴增值税转入流程
  • 12月结账写本年累计吗
  • 物业要交多少钱
  • 免抵退说
  • 旧税号的发票专用章还能使用吗
  • 企业自产自用需要交增值税吗
  • 工程会计做账流程及会计分录
  • 上年留抵增值税怎么做账
  • 小规模纳税人缴纳增值税怎么做账
  • 有限责任公司注册要求
  • 出售土地印花税怎么计算
  • 收到发票未抵扣谁开红字
  • 辅助生产车间工人工资
  • 退款给客户怎么写分录
  • 固定资产的专票可以抵扣吗
  • php部署在什么服务器
  • window10发现威胁怎么办
  • uefiu盘安装系统步骤win10
  • php-ml
  • php数组函数,选班长
  • cpqeadm.exe是什么进程 可以关闭吗 cpqeadm进程查询
  • 建造一座污水处理池投资了45万元
  • 国产设备投资抵免企业所得税
  • 跨行政区域是跨省吗
  • javascript数据类型
  • 冲回上月暂估入账的商品会计分录
  • 购置固定资产进项税率
  • 政府补助增值税即征即退
  • 发票未到已付款怎么入账
  • 银行承兑汇票存在的风险
  • 开了红字信息表对方没开红票
  • 假退库会计分录
  • 没有收入如何做账
  • 企业汇总纳税的原则
  • 应付票据转应付账款分录
  • 劳务收入是什么科目
  • 记账凭证必须具备的基本内容
  • 安全生产费用提取标准 最新
  • 什么叫发票分割单
  • 小规模销售免税产品需要交税吗
  • 小规模升级一般纳税人有什么好处
  • 应收款挂账是什么意思
  • 资本公积金什么时候提取
  • mysql外键怎么写
  • mysql日期用什么数据类型
  • mac忘记mysql初始密码
  • 手动ghost恢复
  • LINUX系统管理员维护招聘
  • 安装xps虚拟打印机
  • 一岁的宝宝可以喝枸杞水吗
  • android 开发 教程
  • Cocos2d-x之getVisibleSize,getContentSize,boundingBox,getContentSizeInPixels,convertToGL,convertToUI
  • cocos2d教程
  • Quick cocos2dx-Lua(V3.3R1)学习笔记(8) ---- 事件篇之单点触摸事件,让我们用精灵模仿一个按钮吧
  • cocos2d开发的知名游戏
  • bootstrap表单模板
  • jQuery插件开发
  • Node.js中的全局对象有
  • 炉石传说架是什么意思
  • activity启动流程图解
  • net命令大全
  • js打开浏览器新的tab页
  • 完美世界打斗
  • python app爬虫教程
  • javascript基础笔记
  • javascript object oriented 面向对象编程初步
  • 公司车辆购置税怎么做账
  • 云南省国家税务总局
  • 山东国家税务局许本虎
  • 增值税可以抵扣多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设