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

  • b站魔力赏怎么玩

    b站魔力赏怎么玩

  • 华为荣耀9x有指纹吗(华为荣耀9x有指关节截屏功能吗)

    华为荣耀9x有指纹吗(华为荣耀9x有指关节截屏功能吗)

  • 并发限制是什么意思(并发数超限解决方法)

    并发限制是什么意思(并发数超限解决方法)

  • 嘀嗒顺风车已开通城市(嘀嗒顺风车开票流程)

    嘀嗒顺风车已开通城市(嘀嗒顺风车开票流程)

  • 电话技术支持有效期(电话技术支持有效,但是保修期已过保)

    电话技术支持有效期(电话技术支持有效,但是保修期已过保)

  • 抖音视频卡顿是怎么回事(抖音视频特别卡)

    抖音视频卡顿是怎么回事(抖音视频特别卡)

  • 6sp尺寸屏幕(iphone6sp屏幕大小尺寸)

    6sp尺寸屏幕(iphone6sp屏幕大小尺寸)

  • oppo下载软件无法安装怎么办(oppo下载软件无图标闪退)

    oppo下载软件无法安装怎么办(oppo下载软件无图标闪退)

  • 读扇区错误还能恢复吗(读扇区错误!)

    读扇区错误还能恢复吗(读扇区错误!)

  • 笔记本电脑相机打开是黑的(笔记本电脑相机无法使用怎么办)

    笔记本电脑相机打开是黑的(笔记本电脑相机无法使用怎么办)

  • 手机很烫怎么处理(手机很烫,怎么办?)

    手机很烫怎么处理(手机很烫,怎么办?)

  • 开视频对方忙线中是什么意思(开视频对方忙线中对方会有提示吗?)

    开视频对方忙线中是什么意思(开视频对方忙线中对方会有提示吗?)

  • 截图保存的图片在哪里(截图保存的图片怎么打印)

    截图保存的图片在哪里(截图保存的图片怎么打印)

  • 微光怎么登录不了(微光怎么登录不上)

    微光怎么登录不了(微光怎么登录不上)

  • 中国手机卡在外国能用吗(中国手机卡在外国显示无服务怎么办)

    中国手机卡在外国能用吗(中国手机卡在外国显示无服务怎么办)

  • 苹果手机删除的短信可以恢复吗(苹果手机删除的照片还能找到吗)

    苹果手机删除的短信可以恢复吗(苹果手机删除的照片还能找到吗)

  • 苹果11什么时候可以买(苹果11什么时候下架停产)

    苹果11什么时候可以买(苹果11什么时候下架停产)

  • vivox27支持快充吗(vivox27支持快充协议吗)

    vivox27支持快充吗(vivox27支持快充协议吗)

  • 拼多多砍价怎么面对面砍(拼多多砍价怎么没有了)

    拼多多砍价怎么面对面砍(拼多多砍价怎么没有了)

  • vivoy93相机水印怎么设置(vivo手机相机水印)

    vivoy93相机水印怎么设置(vivo手机相机水印)

  • word如何删除脚注(word如何删除脚注上方的横线)

    word如何删除脚注(word如何删除脚注上方的横线)

  • vivoz3有没有屏幕指纹解锁(vivoz3有没有屏幕指纹)

    vivoz3有没有屏幕指纹解锁(vivoz3有没有屏幕指纹)

  • wps怎样筛选(Wps怎样筛选红色字体)

    wps怎样筛选(Wps怎样筛选红色字体)

  • qq空间透明度怎么设置(qq空间透明度在哪调)

    qq空间透明度怎么设置(qq空间透明度在哪调)

  • 重装系统出现无法选择C盘怎么办?(重装系统出现无效签名)

    重装系统出现无法选择C盘怎么办?(重装系统出现无效签名)

  • PHPCMS 后台访问特别慢的原因?(cms访问出错)

    PHPCMS 后台访问特别慢的原因?(cms访问出错)

  • 加计扣除内容
  • 国内税和国外税
  • 代垫水电费增值税
  • 其他债权投资有减值吗
  • 与生产相关的关键成功因素包括
  • 工会经费如何申报?
  • 转让股权收入需要缴纳企业所得税吗
  • 财产租赁个人所得税
  • 长投损失了如何处理
  • 劳务外包要通过应付职工薪酬吗
  • 收到工程施工进度款如何记账
  • 出口退税生产企业增值税附加税怎么申报
  • 报销发票财务一旦作废报销人可以收回吗?
  • 改扩建要计提折旧吗
  • 新注册公司第一次怎么报税
  • 影视行业如何盈利
  • 经营收入怎么做分录
  • 暂估成本跨年怎么算
  • 静态回收期计算方法例子
  • 银行网银测试
  • 本期用于购建不动产的扣税凭证怎么填
  • 转出未交增值税怎么算
  • 混合销售兼营如何纳税
  • au_.exe是什么进程
  • uni-app打包h5
  • 加计扣除账务处理
  • 应付债券的应付利息怎么计算
  • php读取文件
  • 微信php开发包
  • 代扣代缴增值税账务处理
  • php curl file_get_contents
  • 人工智能该如何规划软件工程师岗位
  • yolov4环境搭建
  • phpcms开发招聘
  • 技术服务行业增值税税税负率是多少
  • 银行存款手工明细分类账
  • 调整以前年度亏损
  • 企业合并发生的法律服务费影响利润总额吗
  • 商品削价的核算
  • 收购固定资产账务处理
  • 确认借款无法收款怎么办
  • 发票已到材料未到会计分录
  • 小规模纳税人公转私技巧
  • 减免税做营业外收入的会计分录
  • 企业计提坏账准备形成可抵扣暂时性差异
  • 施工企业项目部管理人员对外行为的法律后果由谁承担
  • 建筑企业怎么结算成本
  • 代开发票预缴税款的比例是多少呢?
  • 中国的法律依据是什么
  • 个体户不交税会判刑吗?
  • sql server数据库监控
  • win2000注册表
  • ubuntu服务
  • 网络硬盘在哪
  • windows升级后c盘满了
  • ezulumain.exe是病毒进程吗 ezulumain进程安全吗
  • 怎么在ubuntu上编程
  • openoffice使用
  • win7电脑711
  • windowsxp是什么时候正式发布
  • vsftpd 虚拟用户权限
  • WIN10开始菜单点不动
  • cocos2dx drawcall优化
  • 铁嘴下山全文免费阅读
  • react增删改查功能
  • 很实用的话
  • unity游戏开发的技术路线有哪些
  • 国际安卓应用市场
  • Node.js与Sails redis组件的使用教程
  • python递归查找
  • python 遍历字符串修改
  • js模块化和组件化
  • win7 python
  • 上海买房退税政策2020
  • 外经证的有效期是多久
  • 企业所得税到底是卖方承担还是买方承担
  • 什么是个税扣缴期限
  • 印花税核定依据填写什么
  • 为什么要进行进气歧管真空度检测
  • 国家税务总局多少员工
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设