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

  • 苹果12pro max支持多少w快充(苹果12pro max支持灵动岛吗)

    苹果12pro max支持多少w快充(苹果12pro max支持灵动岛吗)

  • 小度x8怎么远程监控家里(小度x8怎么远程监控不被发现呢)

    小度x8怎么远程监控家里(小度x8怎么远程监控不被发现呢)

  • 好友删了对方还能看到吗(好友删了对方还能查看我回复发的朋友动态码吗)

    好友删了对方还能看到吗(好友删了对方还能查看我回复发的朋友动态码吗)

  • 电脑乱下软件怎么办(电脑乱下软件怎么回事)

    电脑乱下软件怎么办(电脑乱下软件怎么回事)

  • 卡式炉气罐能重复充气吗(卡式炉气罐能重复充气多少次)

    卡式炉气罐能重复充气吗(卡式炉气罐能重复充气多少次)

  • 密码锁原理(密码锁原理与结构图)

    密码锁原理(密码锁原理与结构图)

  • iphone的虚拟按键突然消失(虚拟按键 iphone)

    iphone的虚拟按键突然消失(虚拟按键 iphone)

  • qq群隐藏会话什么意思(qq隐藏会话群主知道吗)

    qq群隐藏会话什么意思(qq隐藏会话群主知道吗)

  • 为啥苹果平板下载不了东西(为啥苹果平板下载软件一直转圈)

    为啥苹果平板下载不了东西(为啥苹果平板下载软件一直转圈)

  • ipad己停用是什么意思(2020版ipad已停用)

    ipad己停用是什么意思(2020版ipad已停用)

  • 淘宝商品质量问题需要买家承担运费么(淘宝商品质量问题退货,快递费谁出)

    淘宝商品质量问题需要买家承担运费么(淘宝商品质量问题退货,快递费谁出)

  • mate30pro和mate30的区别(mate30pro和mate30哪个好)

    mate30pro和mate30的区别(mate30pro和mate30哪个好)

  • ios12比ios11多了什么功能(ios11和ios12哪个占内存)

    ios12比ios11多了什么功能(ios11和ios12哪个占内存)

  • mix2s充电器支持pd吗(mix2的充电器)

    mix2s充电器支持pd吗(mix2的充电器)

  • 华为p30pro有5g版本吗(华为p30pro是否5g手机)

    华为p30pro有5g版本吗(华为p30pro是否5g手机)

  • 华为mate30pro镜头需要贴膜吗(华为mate30pro镜头容易刮花吗)

    华为mate30pro镜头需要贴膜吗(华为mate30pro镜头容易刮花吗)

  • 乐视手机删除的照片如何恢复(乐视手机删除软件)

    乐视手机删除的照片如何恢复(乐视手机删除软件)

  • word文档的视图方式有(word文档的视图方式如何切换)

    word文档的视图方式有(word文档的视图方式如何切换)

  • 华为nova6大概什么时候发布(华为nova6用着怎么样)

    华为nova6大概什么时候发布(华为nova6用着怎么样)

  • 抖音直播点亮是什么意思(抖音直播点亮是怎么回事)

    抖音直播点亮是什么意思(抖音直播点亮是怎么回事)

  • 拼多多商家设置几人成团(拼多多商家设置先用后付)

    拼多多商家设置几人成团(拼多多商家设置先用后付)

  • 苹果抖音怎么上传音乐(苹果抖音怎么上传自己的音乐)

    苹果抖音怎么上传音乐(苹果抖音怎么上传自己的音乐)

  • 小米ai音箱如何播放网易云音乐(小米AI音箱如何使用)

    小米ai音箱如何播放网易云音乐(小米AI音箱如何使用)

  • 微信零钱怎么设置看不到(微信零钱怎么设置手势密码)

    微信零钱怎么设置看不到(微信零钱怎么设置手势密码)

  • 小米4手环怎么连接手机(小米4手环怎么放音乐?)

    小米4手环怎么连接手机(小米4手环怎么放音乐?)

  • 手机上淘宝怎么进自己的店铺(手机上淘宝怎么开店)

    手机上淘宝怎么进自己的店铺(手机上淘宝怎么开店)

  • 怎样查话费清单(话费账单)

    怎样查话费清单(话费账单)

  • 怎么解决win11开机就更新的问题 附详细图文教程(win11开机后)

    怎么解决win11开机就更新的问题 附详细图文教程(win11开机后)

  • 织梦dedecms自定义表单提交之后发送到邮箱的方法(织梦如何添加浮动广告)

    织梦dedecms自定义表单提交之后发送到邮箱的方法(织梦如何添加浮动广告)

  • 减税性质代码及名称是什么意思
  • 一般纳税企业所得税税率是多少2019
  • 收取子公司管理费,开具什么发票
  • 收据大写十万元整怎么写标准
  • 虚开普票的立案标准
  • 完税证明可以代替契税发票吗
  • 公积金缴存基数多久调整一次
  • 期间费用包括资本公积吗
  • 资产评估增值的会计科目
  • 会计核算制度包括哪些准则
  • 印花税按什么征收
  • 高温费计税吗
  • 股权转让收入属于什么
  • 共同投资叫什么
  • 物业公司收取公摊水电费合理吗
  • 发票勾选没有确认怎么办
  • 增值税专用发票可以开电子发票吗
  • 一般纳税人进项税额转出会计分录
  • 增值税多缴纳0.03怎么算
  • 代收款项属于收入范围吗
  • 企业所缴税款能抵税吗
  • 五月份和六月份都有什么节日
  • 固定资产改造更新是否需要计提折旧
  • 其他业务成本如何核算
  • 应付未付的营业收入
  • 已开票不确认收入未收款怎么做账
  • linux连接windows的服务redis
  • 事业单位的费用
  • 应纳消费税包不包括代收代缴
  • linux命令用法
  • 政府补助资金能否作为资本金
  • 文竹发黄怎么挽救?
  • 巴伐利亚森林国家公园钍自然真正自然
  • 付工程改造余款分录
  • La Selva生物站热带雨林树冠上的黑嘴巨嘴鸟,哥斯达黎加 (© Greg Basco/Minden Pictures)
  • 员工报销垫付的钱怎么入账
  • 前端跨域解决方案设计
  • 企业应收是什么意思
  • 劳务费发票 个税
  • 其他综合收益 综合收益
  • 材料暂估入库的依据有哪些
  • 长期股权投资核算的成本法与权益法的主要差别有哪些
  • ajax json请求
  • 确认收入时还没交税
  • 配电室增容验收标准
  • 印花税是按照开票金额还是当月收入
  • mysql怎么实现原子性
  • 税务局不予受理的依据
  • 增值税专用发票抵扣期限
  • 劳务费属于哪个会计科目
  • 发票打印机格式不对
  • 分公司需要做税务报道吗
  • win8.1怎么重新装系统
  • wlanplus是什么软件
  • 微软推送windows 11
  • win10进入安全模式后怎么恢复正常模式启动电脑
  • 系统解决问题的方法
  • rsync -i
  • win7假死真正解决办法
  • windows更新后桌面没反应
  • win8怎么创建宽带连接
  • win8使用手册
  • bootstrap-Treeview实现级联勾选
  • 深入解析java编译器源码剖析与实例详解pdf百度云
  • linux命令find用法详解
  • android PercentRelativeLayout 支持百分比来设置控件的宽高
  • css中文字垂直排列
  • js数组洗牌
  • jQuery simplePage+AJAX plus分页插件用法实例
  • jquery 弹出页面
  • unity3d游戏开发笔记本推荐
  • javascript教程
  • JAVAscript字符串类型单引号和双引号意一样吗
  • javascript ref
  • 住宿发票税率1%怎么回事
  • 低保大数据核查哪些数据
  • 河南省地方税务局房产税管理办法
  • 江苏省国税务局
  • 如何计算环保税减征政策
  • 国家税务总局成都市武侯区税务局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设