react-codemirror2 代码编辑器

1,463 阅读1分钟

react-codemirror2 代码编辑器

CodeMirror是一款在线的支持语法高亮的代码编辑器。官网: codemirror.net/ 安装:

npm install react-codemirror2 codemirror --save

参考原文链接 www.cnblogs.com/minjh/p/150…

 import { Controlled as CodeMirror } from 'react-codemirror2'
 import 'codemirror/lib/codemirror.js';
  import 'codemirror/lib/codemirror.css';
 // 主题风格
 import 'codemirror/theme/solarized.css';
 // 设置代码语言模式(比如JS,SQL,python,java等)
 import 'codemirror/mode/javascript/javascript';
 import 'codemirror/mode/sql/sql.js';
 import 'codemirror/mode/python/python.js';
 import 'codemirror/mode/shell/shell.js';
 import 'codemirror/mode/clike/clike.js';
 // 代码模式,clike是包含java,c++等模式的
 import 'codemirror/mode/clike/clike';
 import 'codemirror/mode/css/css';
 //ctrl+空格代码提示补全
 import 'codemirror/addon/hint/show-hint.css'; // start-ctrl+空格代码提示补全
 import 'codemirror/addon/hint/show-hint.js';
 import 'codemirror/addon/hint/anyword-hint.js'; // end
 //代码高亮
 import 'codemirror/addon/selection/active-line';
 //折叠代码
 import 'codemirror/addon/fold/foldgutter.css';
 import 'codemirror/addon/fold/foldcode.js';
 import 'codemirror/addon/fold/foldgutter.js';
 import 'codemirror/addon/fold/brace-fold.js';
 import 'codemirror/addon/fold/comment-fold.js';

 import 'codemirror/theme/eclipse.css';
 import 'codemirror/theme/mbo.css';
 import 'codemirror/addon/edit/matchbrackets';
 import 'codemirror/addon/comment/comment';
 import 'codemirror/addon/comment/continuecomment';
 
 interface Props {
   readOnly: boolean;
   value: string | undefined;
   options?: (mode: string; theme?: string);
   onChange?: (val: string) => void;
   width?: string;
   height?: string;
 }
 let instance: { setSize: (arg0: ant.arg1: any) => void } | null = null;
 
export default({readOnly,value, options,onChange = () => {},...restProps}: Props) => {
   const DEFAULT_OPTIONS = {
     mode: 'application/json', // json解析
     lineNumbers: true, // 显示行号
     lineWrapping: true,
     tabSize: 4,
     indentUnit: 4,
     matchBrackets: true,
     continuecomments: 'Enter',
     theme: 'solarized', //选中的theme 值也可以是'mbo'
     autofocus: true, //自动获取焦点
     styleActiveLine: true, //光标代码高亮
   }
   
   // CodeMirror 只读配置
   const READONLY_OPTIONS = {
     ...DEFAULT_OPTIONS,
     readOnly
   }
   
   const cmOptions = {...READONLY_OPTIONS,...options}
   
   useEffect(()=>{
    if(instance){
     instance.setSize(restProps.width,restProps.height)
    }
   },[restProps.width,restProps.height])
 
   return (
     <CodeMirror
     value={value || ''}
     onBeforeChange={(editor,data,val) => onChange(val)}
     editorDidMount={(editor) => (instance=editor)}
     options={cmOptions}
     className='common-code-mirror'
     {...restProps}
     />
   )
 }