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

  • vivo手机怎么解除锁屏密码(vivo手机怎么解锁屏幕强制解除密码)

    vivo手机怎么解除锁屏密码(vivo手机怎么解锁屏幕强制解除密码)

  • 毒app分期一期多少天(毒app分期付款利息怎么算)

    毒app分期一期多少天(毒app分期付款利息怎么算)

  • 闲鱼不显示芝麻分图标(闲鱼不显示芝麻信用标签)

    闲鱼不显示芝麻分图标(闲鱼不显示芝麻信用标签)

  • 闲鱼同城自取怎么填发货(闲鱼同城自取怎么取消)

    闲鱼同城自取怎么填发货(闲鱼同城自取怎么取消)

  • 小红书头像为什么改不了(小红书头像为什么模糊)

    小红书头像为什么改不了(小红书头像为什么模糊)

  • 2560x1600分辨率高吗(2560x1600分辨率高吗笔记本)

    2560x1600分辨率高吗(2560x1600分辨率高吗笔记本)

  • 我的红包记录怎么查(我的红包记录怎么删除不了)

    我的红包记录怎么查(我的红包记录怎么删除不了)

  • 荣耀20青春版有红外遥控吗(荣耀20青春版有没有nfc)

    荣耀20青春版有红外遥控吗(荣耀20青春版有没有nfc)

  • 腾讯会议听不到自己的声音(腾讯会议听不到声音怎么回事)

    腾讯会议听不到自己的声音(腾讯会议听不到声音怎么回事)

  • 甲类功放和乙类功放有什么区别(甲类功放和乙类功放音质区别)

    甲类功放和乙类功放有什么区别(甲类功放和乙类功放音质区别)

  • 为什么删除文件提示需要权限(为什么删除文件后磁盘空间还是不变)

    为什么删除文件提示需要权限(为什么删除文件后磁盘空间还是不变)

  • 为什么苹果闹钟铃声已经改了但还是原来的(为什么苹果闹钟不响)

    为什么苹果闹钟铃声已经改了但还是原来的(为什么苹果闹钟不响)

  • 微信被投诉多少次永久封号(微信投诉处理能把钱要回来吗)

    微信被投诉多少次永久封号(微信投诉处理能把钱要回来吗)

  • 电脑没有主机在哪开机(没有主机电脑开哪里)

    电脑没有主机在哪开机(没有主机电脑开哪里)

  • 手机克隆后旧手机数据还在吗?(手机克隆后旧手机删除,新手机还可以用)

    手机克隆后旧手机数据还在吗?(手机克隆后旧手机删除,新手机还可以用)

  • vivo智慧识屏怎么用(vivo智慧识屏怎么保存图片)

    vivo智慧识屏怎么用(vivo智慧识屏怎么保存图片)

  • 喵喵机卡纸怎么办(喵喵机纸出不来怎么办)

    喵喵机卡纸怎么办(喵喵机纸出不来怎么办)

  • 微信视频删除了怎么恢复(微信视频删除了怎么恢复回来)

    微信视频删除了怎么恢复(微信视频删除了怎么恢复回来)

  • 天翼网关怎么加路由器(天翼网关怎么加密)

    天翼网关怎么加路由器(天翼网关怎么加密)

  • icloud账户切换后照片没了(icloud换账号登录后有什么影响)

    icloud账户切换后照片没了(icloud换账号登录后有什么影响)

  • qq微云下载的文件在哪里(qq微云文件下载的文件在哪找)

    qq微云下载的文件在哪里(qq微云文件下载的文件在哪找)

  • win7网络连接感叹号无法上网(王者找名字功能关闭)

    win7网络连接感叹号无法上网(王者找名字功能关闭)

  • 抖音怎样绑定微信号(抖音怎样绑定微信权限)

    抖音怎样绑定微信号(抖音怎样绑定微信权限)

  • K210学习笔记(一)——什么是K210?(k210中文手册)

    K210学习笔记(一)——什么是K210?(k210中文手册)

  • struts2漏洞(struts2漏洞检测工具下载)

    struts2漏洞(struts2漏洞检测工具下载)

  • 建筑业预缴所得税怎么计算
  • 印花税应税凭证书立日期怎么写
  • 征收率 税率 区别
  • 如何查询个人所有贷款记录
  • 账户利息怎么做账务处理
  • 怎么确定开票项目是否属于经营范围
  • 免征增值税还要交印花税么
  • 小规模税收优惠政策1%到什么时候
  • 垫付生育津贴的钱怎么算
  • 加工皮革出口能申请退税吗
  • 房产税城镇土地使用税申报流程
  • 政府补贴转给其他公司
  • 一个月计提2个月工资
  • 如何购买车辆保险
  • 工会经费向地方税务局缴纳的比例是多少
  • 抄税没成功
  • 商业承兑汇票贴现转让
  • 库存现金清查短款会计分录
  • 免抵退税额如何计算
  • 购进货物赠送客户增值税处理
  • 1697509110
  • 不需要缴纳增值税和免税的区别
  • xp从做系统
  • 事业单位工会经费会计账务处理办法
  • 应交税费的销项税额怎么算
  • 苹果6s自动清理
  • macos big sur使用技巧
  • 负债的概念及流动负债的确认条件
  • 营改增后房地产会计账务处理
  • 小规模纳税人进口增值税怎么处理
  • 关闭非系统进程
  • PHP:pg_field_prtlen()的用法_PostgreSQL函数
  • 2020年前端面试
  • rtp webrtc
  • php fetchall
  • 应付账款与其他应付款科目调整
  • 不确认收入要结转成本吗
  • 暂估入账的固定资产可以计提折旧吗
  • 土地使用税计入管理费用还是税金及附加
  • php框架运行机制
  • 投喂小鸟
  • vue sse
  • 猿类作文
  • pytorch如何搭建神经网络
  • 33.JavaScript映射与集合(Map、Set)数据类型基础知识介绍与使用
  • php+vue
  • 城镇土地使用税每年都要交吗
  • 公益性怎么解释
  • 超过认证期限的发票未抵扣能红冲吗
  • 递延所得税资产和递延所得税负债
  • 增值税无票收入负数预警值
  • 背书转让操作
  • 税率为0的发票能用吗
  • 揭秘蒙娜丽莎25恐怖之处
  • 存货和固定资产一经计提减值以后期间不得转回
  • 最新个人捐款是什么意思
  • 租赁公司租赁物计入什么会计科目
  • 非同一控制下控股合并入账价值
  • 以前年度买的固定资产一直未入账,现在还能入账吗?
  • 跨年已付款发票未到会计分录
  • 企业一次性伤残就业补助金是由保险赔付吗
  • 发给客户免费的短信
  • 公司打到个人账户的钱算公款吗
  • win7系统玩游戏好吗
  • 在win7系统中如何用快捷键复制文件或文件夹
  • ie运行flash
  • kmswin7激活步骤
  • unity怎么输出文件
  • javascript编程规范
  • android 坐标系
  • 学javascript可以干什么工作
  • macos如何使用
  • jquery 是否显示
  • python随机发红包代码
  • python迭代器iter
  • jquery插件开发方法
  • 如何抵扣
  • 银行收取手续费可以抵扣进项税额吗
  • 湖北国税网上办税大厅官网
  • 办理养殖照税务登记证
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设