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> <<span style="color: rgba(0, 0, 0, 1)">CodeMirror
</span><span style="color: rgba(0, 128, 128, 1)">37</span> editorDidMount={editor => { <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) => {</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> />)
<span style="color: rgba(0, 128, 128, 1)">77</span> }}</pre>
</div>
<p> 更多:https://codemirror.net/doc/manual.html</p><br><br>
来源:https://www.cnblogs.com/freely/p/13483320.html
頁:
[1]