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

  • vue响应式网页设计企业有必要做网站吗?现在是2022年。现在还有人看网站吗

    vue响应式网页设计企业有必要做网站吗?现在是2022年。现在还有人看网站吗

  • js保留两位小数四舍五入(js保留两位小数 补零)

    js保留两位小数四舍五入(js保留两位小数 补零)

  • 抖音升级粉丝等级的方法有哪些(抖音粉丝等级提升)

    抖音升级粉丝等级的方法有哪些(抖音粉丝等级提升)

  • 微信如何调回日间模式(微信如何调回日历提醒)

    微信如何调回日间模式(微信如何调回日历提醒)

  • ipad有必要买插卡版吗(ipad必须要用原装插头吗)

    ipad有必要买插卡版吗(ipad必须要用原装插头吗)

  • 目前支持esim的手表(支持esim的手机2021)

    目前支持esim的手表(支持esim的手机2021)

  • 拼多多个人开店流程是什么(拼多多个人开店流程及费用多少)

    拼多多个人开店流程是什么(拼多多个人开店流程及费用多少)

  • 苹果x手机充电发热怎么回事(苹果X手机充电口接触不良)

    苹果x手机充电发热怎么回事(苹果X手机充电口接触不良)

  • ios升级会删掉微信记录吗(ios升级后微信聊天记录还有吗)

    ios升级会删掉微信记录吗(ios升级后微信聊天记录还有吗)

  • 关闭超线程可以提升单核性能吗(关闭超线程可以提升降低功耗吗)

    关闭超线程可以提升单核性能吗(关闭超线程可以提升降低功耗吗)

  • 管理员怎么禁言(管理员怎么禁言别人)

    管理员怎么禁言(管理员怎么禁言别人)

  • iphone11promax是5g手机吗(iphone11promax是5g吗)

    iphone11promax是5g手机吗(iphone11promax是5g吗)

  • 息屏时钟会烧屏吗(息屏时钟会烧屏么)

    息屏时钟会烧屏吗(息屏时钟会烧屏么)

  • 手机照片怎么打包(手机照片怎么打包发给别人)

    手机照片怎么打包(手机照片怎么打包发给别人)

  • 淘宝多少号生日(淘宝生日当天有什么优惠)

    淘宝多少号生日(淘宝生日当天有什么优惠)

  • word文档不能修改(word不能修改是怎么回事)

    word文档不能修改(word不能修改是怎么回事)

  • word标题阴影边框怎么设置(word标题阴影)

    word标题阴影边框怎么设置(word标题阴影)

  • vivo手机怎么强制重启(vivo手机怎么强制关机重启)

    vivo手机怎么强制重启(vivo手机怎么强制关机重启)

  • 座机电话声音小怎么办(座机电话声音小怎么调大声)

    座机电话声音小怎么办(座机电话声音小怎么调大声)

  • 微信如何换一个号登陆(微信如何换一个身份证绑定)

    微信如何换一个号登陆(微信如何换一个身份证绑定)

  • 硬盘插上去没任何反应(硬盘插上以后没有显示出来)

    硬盘插上去没任何反应(硬盘插上以后没有显示出来)

  • tt语音怎么开变声器(tt语音怎么开变声器聊天)

    tt语音怎么开变声器(tt语音怎么开变声器聊天)

  • 如何学习it课程(如何学好it)

    如何学习it课程(如何学好it)

  • 如何修改程序的默认安装路径(如何修改程序的安装路径)

    如何修改程序的默认安装路径(如何修改程序的安装路径)

  • dss什么意思(fsdss什么意思)

    dss什么意思(fsdss什么意思)

  • 【周末闲谈】畅想AR,AR领域迎来新风口(周末闲暇时光是什么意思)

    【周末闲谈】畅想AR,AR领域迎来新风口(周末闲暇时光是什么意思)

  • 农产品的税率是9%吗
  • 建筑业适用什么行业
  • 简易计征开什么发票
  • 简易计税和一般计税的区别
  • 出差人员报销差额怎么算
  • 公司回购房产契税谁交
  • 离职未收回货款要我承担
  • 事业单位取暖费什么时候发
  • 运输公司租入的车辆如何核算
  • 债券利息收入的增值税
  • 发票限额是多少
  • 税务局查账一般需要几天
  • 多开了一张电子发票怎么办
  • 计提增值税会计账务处理
  • 收购全资子公司的账务处理
  • 票面税费和实际上税为什么不一样
  • 企业的其他业务收入主要核算
  • 日记账的填制
  • 购买现金支票的扣费方式
  • 注册资本认缴制开始实施时间
  • 1697510217
  • 应收账款坏账准备计提比例
  • 临时文件夹在哪个位置
  • win10禁用安全杀毒功能
  • 确认预计负债的必要条件
  • 公司车过户给个人流程
  • php怎么启动
  • PHP:pg_set_client_encoding()的用法_PostgreSQL函数
  • 出售低值易耗品的账务处理
  • 加速折旧法计算公式 CFA
  • 如何搭建chatGPT
  • 商品购进核算
  • php抽象函数
  • php framework框架
  • uni-app入门到实战
  • 如何在vue项目中运行后端
  • 人工智能机器人
  • 兼职员工的工资怎么发放
  • 对公账户怎么打印
  • 非营利组织能否开社保账户
  • 快速实现愿望超灵的方法
  • 劳务税能退税吗
  • 保险补偿多久到账
  • 投资性房地产转为存货
  • 中级报名规则
  • 进销存怎么看
  • 所有者权益科目有哪些
  • 如何避免电子发票重复报销的情况
  • 企业支付宝买东西怎么买
  • 购买固定资产是应付账款还是其他应付款
  • 专票三流合一指哪三流
  • 民办非企业可以开发票吗
  • sql语句实现分页
  • CentOS 7.0.1406 正式版发布(附CentOS7下载地址)
  • 电脑一直显示windowsxp怎么办
  • 苹果电脑dock栏不见了
  • cpqa1000.exe是安全进程吗 cpqa1000进程有什么作用
  • neoCapture.exe - neoCapture是什么进程 有什么用
  • win7架设ftp服务器
  • win10预览版好吗
  • win7无法更改工作组
  • 以下关于shell脚本参数
  • Android Chromium WebView学习启动篇
  • Android中SQLite数据库的使用
  • 统计文件个数linux
  • android怎么样
  • 黑马程序员学费多少钱2022
  • node.js app
  • 进入杭州车辆怎么申请
  • 大连天气app
  • 查博士报告怎么查真假
  • 长春国税局科员工资是多少
  • 怎么查了?
  • 三证合一后还要做什么
  • 网上缴公积金怎么查询
  • 复印店开什么发票
  • 微山湖到底属于哪里
  • 2010年末实现净利润390万,宣告发放现金股利40万,在计算本年未分配利润时,是否要减掉这40万?
  • 北京税务热线电话
  • 收购晾晒烟叶,支付价款20万元,支付价外补贴2万元
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设