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

  • iqoo8怎么关闭自动调节亮度(iqoo75g怎么关闭)

    iqoo8怎么关闭自动调节亮度(iqoo75g怎么关闭)

  • yy怎么搜索频道(yy怎么搜索频道房间电脑)

    yy怎么搜索频道(yy怎么搜索频道房间电脑)

  • 桌面角标权限是什么意思(桌面图标角标权限)

    桌面角标权限是什么意思(桌面图标角标权限)

  • 微信被盗好友被拉黑怎么申诉(微信被盗好友被删除验证不了怎么办)

    微信被盗好友被拉黑怎么申诉(微信被盗好友被删除验证不了怎么办)

  • 荣耀20pro支持防水防尘吗(荣耀20pro有没有防抖功能)

    荣耀20pro支持防水防尘吗(荣耀20pro有没有防抖功能)

  • 微信字太小怎么调大(微信字太小怎么变大)

    微信字太小怎么调大(微信字太小怎么变大)

  • 苹果手机删掉的微信记录还可以找到吗(苹果手机删掉的游戏在哪里能找到)

    苹果手机删掉的微信记录还可以找到吗(苹果手机删掉的游戏在哪里能找到)

  • 微信发我想你了为什么会出现星星(微信发我想你了特效)

    微信发我想你了为什么会出现星星(微信发我想你了特效)

  • 小果qq软件干什么用的?(qq小软件下载)

    小果qq软件干什么用的?(qq小软件下载)

  • 小米9se什么时候更新miui12(小米9se什么时候更新14)

    小米9se什么时候更新miui12(小米9se什么时候更新14)

  • 荣耀X10怎么截屏(荣耀x10截屏太难)

    荣耀X10怎么截屏(荣耀x10截屏太难)

  • 抖音怎么看见好友在线(抖音怎么看见好友在线时间)

    抖音怎么看见好友在线(抖音怎么看见好友在线时间)

  • 表格中输入身份证号后显示E是为什么(表格中输入身份证号怎么计算年龄)

    表格中输入身份证号后显示E是为什么(表格中输入身份证号怎么计算年龄)

  • md5值是什么意思(md5值怎么修改)

    md5值是什么意思(md5值怎么修改)

  • 淘宝退货时间一般多久(淘宝退货时间一般多长)

    淘宝退货时间一般多久(淘宝退货时间一般多长)

  • 被拉入黑名单怎么解除(被拉入黑名单怎么才能打通电话)

    被拉入黑名单怎么解除(被拉入黑名单怎么才能打通电话)

  • word点乘号怎么打出来(word乘号怎么弄)

    word点乘号怎么打出来(word乘号怎么弄)

  • 华为m6分辨率是多少(华为v6分辨率)

    华为m6分辨率是多少(华为v6分辨率)

  • 怎么用微信发大文件(怎么用微信发大于1g的文件)

    怎么用微信发大文件(怎么用微信发大于1g的文件)

  • wps计算公式怎么输入(wps计算公式怎么用)

    wps计算公式怎么输入(wps计算公式怎么用)

  • y97导航键怎么设置(y67怎么设置导航键)

    y97导航键怎么设置(y67怎么设置导航键)

  • cad怎么来标注尺寸(cad怎么标注尺寸快捷键)

    cad怎么来标注尺寸(cad怎么标注尺寸快捷键)

  • 携程如何开票(携程上如何开票)

    携程如何开票(携程上如何开票)

  • 字的间距怎么调(字的间距怎么调整)

    字的间距怎么调(字的间距怎么调整)

  • rename命令  批量修改文件名称(rename批处理重名)

    rename命令 批量修改文件名称(rename批处理重名)

  • 织梦DEDECMS手机端生成静态页面方法(织梦使用教程)

    织梦DEDECMS手机端生成静态页面方法(织梦使用教程)

  • 季度所得税费用如何计提
  • 个人所得缴税租房减免该怎么弄?
  • 税控设备抵减增值税政策
  • 核定征收可以无发票做账吗
  • 个体户3万免税免的是哪些税
  • 审计库存现金盘点方法
  • 股东以外的人投资怎么做账
  • 新会计准则科目编码
  • 公交车收购
  • 汇算清缴期间费用社保填哪里
  • 公司租赁的车辆发生的费用都可以报销吗?
  • 出口退税申报流程视频
  • 长期股权投资范围比例
  • 暂估入库的材料领用时如何做账
  • 特殊销售方式下销售额的确定
  • 结转已完工产品会计分录
  • 退回剩余工程物资计入什么科目
  • 收到政府补助怎么发朋友圈
  • 反写状态已反写是什么意思
  • 防伪税控减免税款的会计分录
  • 长期待摊费用当月减少当月摊销吗
  • 付款凭证会计分录怎么写
  • 服务费发生退回怎么处理
  • 简易征收当月已经开出的17%怎么办?
  • 定期存款利息收入现金流
  • 企业所得税季初人数
  • 个人所得税更正申报有滞纳金吗
  • 关联企业纳税调整期限
  • 金融服务公司收取金融服务费
  • 电子普通发票怎么开
  • 企业收到银行未收到怎么做账
  • 工程上的材料费进什么科目
  • 企业签订的借款合同印花税
  • 苹果推送改不掉三全音
  • vue页面获取url参数
  • PHP:spl_object_hash()的用法_spl函数
  • 进出口商品的税率是多少
  • 长春花怎么养才能爆花
  • thinkphp上传文件
  • vue思维导图怎么下载
  • spring bootcsdn
  • detr训练自己的数据集
  • 帝国cms建站实例教程
  • 企业的应交税金一般通过什么科目核算
  • 发票税额打印不全可以入账吗
  • 织梦cms要钱吗
  • 固定资产进项税额怎么抵扣
  • 外来原始凭证审核内容
  • 增值税增量留抵退税计算
  • 无偿调拨资产怎么提折旧
  • 确认委托代销手续费的会计分录
  • 中小企业应交税费怎么算
  • 进项税抵扣的分录怎么做
  • 待报解预算收入什么意思
  • 捐赠支出的账务处理
  • 收到跨年的发票怎么入账
  • 开销项负数的流程
  • 小规模纳税人计算公式
  • 电子发票是否是原件发票
  • 客房服务费可以开发票吗
  • 财务单独核算是什么意思
  • mysql视图语句
  • centos7ntp服务器
  • freebsd windows
  • 索尼笔记本电脑怎么进入bios设置
  • linux登录提示
  • psoft1.exe - psoft1是什么进程 有什么作用
  • win8右边栏设置
  • WIN10更新失败
  • 信佛是信教吗
  • 动态加载dll错误
  • 简述matlab中控制系统的数学描述类型
  • html标签页效果
  • 整型python
  • python设计教程
  • jQuery.Callbacks()回调函数队列用法详解
  • js easyui
  • 深圳市税务局发短信是真的吗
  • 自然人扣缴客户端重新安装后信息怎么同步
  • 开票项目信息分类查询
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设