位置: 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是什么类型文件?)

  • 支付宝核酸采样码在哪里查询(支付宝核酸采样码在哪里找)

    支付宝核酸采样码在哪里查询(支付宝核酸采样码在哪里找)

  • 红米手表2怎么自定义表盘(红米手表2怎么进入开发者模式)

    红米手表2怎么自定义表盘(红米手表2怎么进入开发者模式)

  • 华为mate30pro摄像头是徕卡的吗(华为mate30pro摄像头玻璃破碎多少钱)

    华为mate30pro摄像头是徕卡的吗(华为mate30pro摄像头玻璃破碎多少钱)

  • 小米手机多屏互动功能在哪里(小米手机多屏互联)

    小米手机多屏互动功能在哪里(小米手机多屏互联)

  • 抖音群里最多可以加入多少人(抖音群里最多可加多少人)

    抖音群里最多可以加入多少人(抖音群里最多可加多少人)

  • 小米云流量支持机型有哪些(小米云流量支持多少G)

    小米云流量支持机型有哪些(小米云流量支持多少G)

  • 美图手机摔黑屏打不开怎么办(美图手机摔黑屏怎么回事)

    美图手机摔黑屏打不开怎么办(美图手机摔黑屏怎么回事)

  • 华硕z390-p能超频吗(华硕z390plus超频)

    华硕z390-p能超频吗(华硕z390plus超频)

  • 手机不贴膜能用多久(手机不贴膜能用3年吗)

    手机不贴膜能用多久(手机不贴膜能用3年吗)

  • iphone6像素多少万(iphone6像素多少万前置)

    iphone6像素多少万(iphone6像素多少万前置)

  • 手机腾讯会员怎么分享给别人使用(手机腾讯会员怎么分享二维码登录微信)

    手机腾讯会员怎么分享给别人使用(手机腾讯会员怎么分享二维码登录微信)

  • 苹果手机已激活是什么意思(苹果手机已激活和未激活有什么区别)

    苹果手机已激活是什么意思(苹果手机已激活和未激活有什么区别)

  • 微信新表情在哪里(微信新表情在哪里找到)

    微信新表情在哪里(微信新表情在哪里找到)

  • 主板上有哪些主要部件(主板上有哪些主机)

    主板上有哪些主要部件(主板上有哪些主机)

  • 8p是什么处理器(苹果14plus是什么处理器)

    8p是什么处理器(苹果14plus是什么处理器)

  • 显存有什么用(电脑显存有什么用)

    显存有什么用(电脑显存有什么用)

  • ipad如何设置开盖唤醒(ipad如何设置开盖亮屏幕)

    ipad如何设置开盖唤醒(ipad如何设置开盖亮屏幕)

  • soul能加通讯录好友不(soul添加手机联系人)

    soul能加通讯录好友不(soul添加手机联系人)

  • 京东商城怎么取消预约(京东商城怎么取消发票)

    京东商城怎么取消预约(京东商城怎么取消发票)

  • 12306积分有效期多久(12306积分有效期包括当天吗)

    12306积分有效期多久(12306积分有效期包括当天吗)

  • 苹果右划返回哪里设置(苹果右划返回哪里设置失灵l)

    苹果右划返回哪里设置(苹果右划返回哪里设置失灵l)

  • 手机三屏视频怎么做(三屏的视频怎么做出来的)

    手机三屏视频怎么做(三屏的视频怎么做出来的)

  • s10韩版区别(韩版s10 5g和国行s10 哪个好)

    s10韩版区别(韩版s10 5g和国行s10 哪个好)

  • Vue 高德地图(@amap/amap-jsapi-loader)的基本使用:添加标记、POI关键字搜索、路线规划...(方法一)(vue 高德地图 窗体)

    Vue 高德地图(@amap/amap-jsapi-loader)的基本使用:添加标记、POI关键字搜索、路线规划...(方法一)(vue 高德地图 窗体)

  • 【目标检测】YOLOV1详解(目标检测yolov5)

    【目标检测】YOLOV1详解(目标检测yolov5)

  • dedecms把数据保存到数据库附加表 `dede_addonimages` 时出错(dedecms采集怎么用)

    dedecms把数据保存到数据库附加表 `dede_addonimages` 时出错(dedecms采集怎么用)

  • 收益性支出和资产的区别
  • 初装费包括什么
  • 税控盘的进项税在哪里申报
  • 开淘宝店怎么做账
  • 零售化妆品交什么税种
  • 应收款和应付款对抵
  • 分公司是否需要刻章
  • 预缴企业所得税分录
  • 分公司可以成为单位犯罪的主体吗
  • 出口退税申报无电子信息
  • 应收账款税收风险有哪些
  • 缴交社保基金会计分录怎么写?
  • 子公司的财报和母公司的财报并表吗
  • 职工薪酬包括哪三个方面
  • 冲销应收账款会引起
  • 应交税金属于什么会计分录
  • 保证金逾期退还
  • 城市维护建设税减免税优惠政策
  • 增值税进项税额是什么意思
  • 业务招待费怎么调整应纳税所得额
  • 销售方收到红字信息表
  • 待处理财产损益科目编码
  • 非工资收入个人所得税税率
  • 小程序嵌入h5页面可以不写安全地址吗为什么
  • win11系统怎么设置密码锁屏
  • 发行债券会计分录怎么写
  • 涉税服务实务重点总结
  • explorer.exe是啥意思
  • 材料退款会计分录
  • 应收票据贴现的性质是什么
  • 增值税专用发票上注明的价款含税吗
  • 采购周转材料会计分录怎么写
  • 会计核算方法体系构成
  • 购入固定资产款项已付
  • php批量删除操作记录
  • 微信小程序的视频怎么下载
  • 会计申报需要哪些数据
  • 把ChatGPT接入我的个人网站
  • 跨年度费用发票还可以抵扣所得税吗
  • 20分钟,使用Amazon SageMaker快速搭建属于自己的AIGC应用
  • pytorch nn.parameters
  • 直接融资租赁案例
  • 增值税进项税抵扣凭证
  • 应收利息罚息什么意思
  • 怎么样写合同书
  • 支付版权使用费怎么记账
  • 季度利润表是累计数吗
  • sqlserver远程连接失败
  • 差旅费分摊到各部门
  • 申报要补税怎么办
  • 存货非正常损失进项税额转出分录
  • 资产利润率在1104哪个表
  • 基本户转到一般户用途写什么
  • 甲企业于2019年3月1日以2000万元取得乙上市公司
  • 公司与公司之间的函怎么写
  • 车票抵扣进项税怎么计算
  • 异地开立分公司条件
  • 关于废止有关排污收费规章和规范性文件的决定
  • perl -ne
  • mysql修改默认字符集和校对规则
  • sql2008数据库置疑
  • windows vista好用吗
  • linux获取主目录的命令
  • windows10磁盘
  • win7系统玩红色警戒怎么全屏设置
  • linux纯文本浏览器
  • keyemain.exe是什么
  • Win10系统如何打开任务管理器
  • Slackware Linux init 进程
  • win8系统怎么设置无线网连接啊
  • android edittext被系统键盘遮挡
  • unity自动寻路插件
  • 悬浮广告怎么屏蔽
  • python 内连接
  • python scripy
  • javascript常用函数大全
  • jQuery插件封装时如要实现链式编程,需要
  • js中的继承
  • jquery的理解
  • 北京摇号摇中了能过户吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设