宁波瑞鸟服饰公司 發表於 2020-8-11 20:54:00

react-codemirror2代码编辑器

<p>1、安装</p>
<div class="cnblogs_code">
<pre>npm install react-codemirror2 codemirror --save</pre>
</div>
<p>2、使用</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> import {UnControlled as CodeMirror} from 'react-codemirror2'
<span style="color: rgba(0, 128, 128, 1)"> 2</span> import 'codemirror/lib/codemirror.js'
<span style="color: rgba(0, 128, 128, 1)"> 3</span> import 'codemirror/lib/codemirror.css'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 主题风格</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> import 'codemirror/theme/solarized.css'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 代码模式,clike是包含java,c++等模式的</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> import 'codemirror/mode/clike/clike'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> import 'codemirror/mode/css/css'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">ctrl+空格代码提示补全</span>
<span style="color: rgba(0, 128, 128, 1)">10</span> import 'codemirror/addon/hint/show-hint.css'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">11</span> import 'codemirror/addon/hint/show-hint'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">12</span> import 'codemirror/addon/hint/anyword-hint.js'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">代码高亮</span>
<span style="color: rgba(0, 128, 128, 1)">14</span> import 'codemirror/addon/selection/active-line'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">折叠代码</span>
<span style="color: rgba(0, 128, 128, 1)">16</span> import 'codemirror/addon/fold/foldgutter.css'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">17</span> import 'codemirror/addon/fold/foldcode.js'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">18</span> import 'codemirror/addon/fold/foldgutter.js'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">19</span> import 'codemirror/addon/fold/brace-fold.js'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">20</span> import 'codemirror/addon/fold/comment-fold.js'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">21</span> import 'codemirror/addon/edit/closebrackets'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">22</span> import 'codemirror/addon/edit/matchBrackets'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">23</span>
<span style="color: rgba(0, 128, 128, 1)">24</span> export <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> class Index extends Component {
</span><span style="color: rgba(0, 128, 128, 1)">25</span> <span style="color: rgba(0, 0, 0, 1)">constructor() {
</span><span style="color: rgba(0, 128, 128, 1)">26</span> <span style="color: rgba(0, 0, 0, 1)">    super();
</span><span style="color: rgba(0, 128, 128, 1)">27</span>   <span style="color: rgba(0, 0, 255, 1)">this</span>.instance = <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">28</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">29</span>   state =<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">30</span>   data:''<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">31</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">32</span> <span style="color: rgba(0, 0, 0, 1)">render(){
</span><span style="color: rgba(0, 128, 128, 1)">33</span>   const {data}=<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state
</span><span style="color: rgba(0, 128, 128, 1)">34</span>   let that=<span style="color: rgba(0, 0, 255, 1)">this</span>
<span style="color: rgba(0, 128, 128, 1)">35</span>   <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">(
</span><span style="color: rgba(0, 128, 128, 1)">36</span>      &lt;<span style="color: rgba(0, 0, 0, 1)">CodeMirror
</span><span style="color: rgba(0, 128, 128, 1)">37</span>         editorDidMount={editor =&gt; { <span style="color: rgba(0, 0, 255, 1)">this</span>.instance =<span style="color: rgba(0, 0, 0, 1)"> editor }}
</span><span style="color: rgba(0, 128, 128, 1)">38</span>         value=<span style="color: rgba(0, 0, 0, 1)">{data}
</span><span style="color: rgba(0, 128, 128, 1)">39</span>         options=<span style="color: rgba(0, 0, 0, 1)">{{
</span><span style="color: rgba(0, 128, 128, 1)">40</span>         mode: {name:'text/css'<span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)">41</span>         theme: 'solarized dark'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">42</span>         autofocus:<span style="color: rgba(0, 0, 255, 1)">true</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">自动获取焦点</span>
<span style="color: rgba(0, 128, 128, 1)">43</span>         styleActiveLine:<span style="color: rgba(0, 0, 255, 1)">true</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">光标代码高亮</span>
<span style="color: rgba(0, 128, 128, 1)">44</span>         lineNumbers: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">显示行号</span>
<span style="color: rgba(0, 128, 128, 1)">45</span>         smartIndent:<span style="color: rgba(0, 0, 255, 1)">true</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">自动缩进</span>
<span style="color: rgba(0, 128, 128, 1)">46</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">start-设置支持代码折叠</span>
<span style="color: rgba(0, 128, 128, 1)">47</span>         lineWrapping:<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">48</span>         foldGutter:<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">49</span>         gutters:['CodeMirror-linenumbers','CodeMirror-foldgutter'],<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">end</span>
<span style="color: rgba(0, 128, 128, 1)">50</span> <span style="color: rgba(0, 0, 0, 1)">          extraKeys:{
</span><span style="color: rgba(0, 128, 128, 1)">51</span>               "Ctrl":"autocomplete"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">52</span>               "Ctrl-S": <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (editor) {
</span><span style="color: rgba(0, 128, 128, 1)">53</span> <span style="color: rgba(0, 0, 0, 1)">                      that.codeSave(editor)
</span><span style="color: rgba(0, 128, 128, 1)">54</span> <span style="color: rgba(0, 0, 0, 1)">                  },
</span><span style="color: rgba(0, 128, 128, 1)">55</span>               "Ctrl-Z":<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (editor) {
</span><span style="color: rgba(0, 128, 128, 1)">56</span> <span style="color: rgba(0, 0, 0, 1)">                      editor.undo();
</span><span style="color: rgba(0, 128, 128, 1)">57</span>                     },<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">undo</span>
<span style="color: rgba(0, 128, 128, 1)">58</span>               "F8":<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (editor) {
</span><span style="color: rgba(0, 128, 128, 1)">59</span> <span style="color: rgba(0, 0, 0, 1)">                      editor.redo();
</span><span style="color: rgba(0, 128, 128, 1)">60</span>                     },<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Redo</span>
<span style="color: rgba(0, 128, 128, 1)">61</span> <span style="color: rgba(0, 0, 0, 1)">                  },
</span><span style="color: rgba(0, 128, 128, 1)">62</span>               matchBrackets: <span style="color: rgba(0, 0, 255, 1)">true</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">括号匹配,光标旁边的括号都高亮显示</span>
<span style="color: rgba(0, 128, 128, 1)">63</span>               autoCloseBrackets: <span style="color: rgba(0, 0, 255, 1)">true</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">键入时将自动关闭()[]{}''""</span>
<span style="color: rgba(0, 128, 128, 1)">64</span> <span style="color: rgba(0, 0, 0, 1)">                }}
</span><span style="color: rgba(0, 128, 128, 1)">65</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> onChange={this.codeOnChange}</span>
<span style="color: rgba(0, 128, 128, 1)">66</span>
<span style="color: rgba(0, 128, 128, 1)">67</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 在失去焦点的时候触发,这个时候放数据最好</span>
<span style="color: rgba(0, 128, 128, 1)">68</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> onBlur={this.codeOnBlur}</span>
<span style="color: rgba(0, 128, 128, 1)">69</span>
<span style="color: rgba(0, 128, 128, 1)">70</span>             <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> // 这个必须加上,否则在一些情况下,第二次打开就会有问题</span>
<span style="color: rgba(0, 128, 128, 1)">71</span>             <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> //   onBeforeChange={(editor, data, value) =&gt; {</span>
<span style="color: rgba(0, 128, 128, 1)">72</span>             <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> //       console.log("onBeforeChange fresh")</span>
<span style="color: rgba(0, 128, 128, 1)">73</span>             <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> //       console.log(JSON.stringify(data));</span>
<span style="color: rgba(0, 128, 128, 1)">74</span>             <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> //   }}</span>
<span style="color: rgba(0, 128, 128, 1)">75</span>             <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   /* HERE: pick out only the value. and might as well get name. */</span>
<span style="color: rgba(0, 128, 128, 1)">76</span>             /&gt;)
<span style="color: rgba(0, 128, 128, 1)">77</span> }}</pre>
</div>
<p>&nbsp;更多:https://codemirror.net/doc/manual.html</p><br><br>
来源:https://www.cnblogs.com/freely/p/13483320.html
頁: [1]
查看完整版本: react-codemirror2代码编辑器