codemirror antdesign結(jié)合

一罪郊、背景

在后端管理界面中蠕蚜,有時候我們需要能夠?qū)⒁恍┡渲么a能夠在代碼中進(jìn)行配置,如果用普通的TextArea可視化不是很好悔橄,codemirror算是業(yè)界在Js里面做的很不錯的一個代碼編輯框波势,可以支持目前能見到的所有的代碼的風(fēng)格翎朱。但是在antdesign中的引用卻很少,經(jīng)過一些摸索尺铣,這里進(jìn)行總結(jié)下

官方鏈接:

https://www.npmjs.com/package/react-codemirror2

該文章是從我的個人文檔遷移過來拴曲,平常偶爾會繼續(xù)更新,可以點擊這里查看最新:https://www.yuque.com/simonalong/jishu/dnlsiy

二凛忿、前端引入

1.安裝

我們這里使用開源的將codemirror跟react結(jié)合的一個框架項目澈灼,在前端項目根目錄下安裝該插件

npm install react-codemirror2 codemirror --save

2.antdesign項目引入

// 引入codemirror封裝
import {UnControlled as CodeMirror} from 'react-codemirror2'
import 'codemirror/lib/codemirror.css';

// 主題風(fēng)格
import 'codemirror/theme/solarized.css';

// 代碼模式,clike是包含java,c++等模式的
import 'codemirror/mode/clike/clike';

3.使用

<CodeMirror
    value={record.data}
    options={{
         mode: 'groovy',
         theme: 'solarized light',
         lineNumbers: true,
    }}
        
    // 這個必須加上店溢,否則在一些情況下叁熔,第二次打開就會有問題 
    onBeforeChange={(editor, data, value) => {
          console.log("onBeforeChange fresh")
          console.log(JSON.stringify(data));
          console.log(JSON.stringify(value));
    }}
        /* HERE: pick out only the value. and might as well get name. */
/>

4.查看界面效果

image.png

三、注意事項

其中react-codemirror2里面有個問題就是在將<CodeMirror>這個放到表單中的時候床牧,onBeforeChange函數(shù)(如上所示)必須添加荣回,否則會報錯,因為antdesign的那個對參數(shù)值修改的函數(shù)采用的是onChange戈咳,但是CodeMirror采用的是onBeforeChange心软,所以,必須再封裝一層著蛙,如上删铃,這樣才不會報錯,這個問題可看這里

四踏堡、擴展

以上是基本的用法猎唁,但是我們有時候還有可能需要使用更多的代碼風(fēng)格,以及更多的不同的代碼主題顷蟆,還有代碼的折疊凳這些功能诫隅,應(yīng)該怎么辦呢,可以直接看codeMirro官網(wǎng)帐偎,不過里面東西太多阎肝,不好分類,加上最近自己找的一些東西

1.theme風(fēng)格

https://codemirror.net/demo/theme.html
引用方式:

import 'codemirror/theme/solarized.css';

2.代碼模式

https://codemirror.net/mode/
其中常見的代碼風(fēng)格:c肮街,c++风题,c#,java嫉父,scala沛硅,object-c等如下的這么幾個都是位于clike包中

text/x-csrc (C), text/x-c++src (C++), text/x-java (Java), text/x-csharp (C#), text/x-objectivec (Objective-C),text/x-scala (Scala), text/x-vertex x-shader/x-fragment(shader programs), text/x-squirrel (Squirrel) and text/x-ceylon(Ceylon)

引用:

import 'codemirror/mode/clike/clike';

3.其他配置

其他的一些配置,可以見官網(wǎng)的配置這里
https://codemirror.net/doc/manual.html#config
但是這里全是英文绕辖,對英文不是很好的同學(xué)還是有點吃力(自己也是哈哈)摇肌,下面列舉一些常見的一些常見的中文鏈接
https://www.jishux.com/p/1fa59c3b47afc25f
http://www.fdlly.com/p/1730562672.html
https://www.cnblogs.com/Angies/p/7830948.html

五、問題

1.Cannot read property 'length' of undefined

Uncaught TypeError: Cannot read property 'length' of undefined
    at changeEnd (codemirror.js:4601)
    at adjustForChange (codemirror.js:4608)
    at computeSelAfterChange (codemirror.js:4619)
    at makeChangeInner (codemirror.js:5247)
    at CodeMirror.makeChange (codemirror.js:5241)
    at codemirror.js:3906
    at makeChange (codemirror.js:5225)
    at replaceRange (codemirror.js:5452)
    at Doc.replaceRange (codemirror.js:6121)
    at CodeMirror.replaceRange (codemirror.js:9695)
    at UnControlled.hydrate (index.js:528)
    at UnControlled.componentWillReceiveProps (index.js:607)
    at callComponentWillReceiveProps (react-dom.development.js:12708)
    at updateClassInstance (react-dom.development.js:12918)
    at updateClassComponent (react-dom.development.js:14487)
    at beginWork (react-dom.development.js:15335)
    at performUnitOfWork (react-dom.development.js:18150)
    at workLoop (react-dom.development.js:18190)
    at renderRoot (react-dom.development.js:18276)
    at performWorkOnRoot (react-dom.development.js:19165)
    at performWork (react-dom.development.js:19077)
    at performSyncWork (react-dom.development.js:19051)
    at interactiveUpdates$1 (react-dom.development.js:19320)
    at interactiveUpdates (react-dom.development.js:2169)
    at dispatchInteractiveEvent (react-dom.development.js:4880)

有問題源碼

<Col lg={24}>
  <FormItem labelCol={{ span: 5 }} wrapperCol={{ span: 24 }} label="數(shù)據(jù):">
    {form.getFieldDecorator('data', {
        initialValue: drawerRecord.data,
        rules: [{ required: true, message: '請輸入數(shù)據(jù)仪际!' }],
            })(
        <CodeMirror
          options={{
          mode: 'text/x-java',
          theme: 'solarized light',
          lineNumbers: true,
          lineWrapping: true,
        }}

        // onBeforeChange={(editor, data, value) => {
        //   console.log("onBeforeChange fresh")
        //   console.log(JSON.stringify(data));
        //   console.log(JSON.stringify(value));
        // }}
      />
        )}
  </FormItem>
</Col>

添加函數(shù)onBeforeChange就可以了

六围小、參考

antdesign的codeMirror
https://github.com/ZiQiangWang/react-cmirror
https://github.com/codemirror/codemirror
groovy:風(fēng)格:https://codemirror.net/mode/groovy/index.html
中文配置參考:
https://www.jishux.com/p/1fa59c3b47afc25f
http://www.fdlly.com/p/1730562672.html
https://www.cnblogs.com/Angies/p/7830948.html
http://www.reibang.com/p/4d5ef6808da7
json:代碼支持
https://www.cnblogs.com/Angies/p/7830948.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末昵骤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子肯适,更是在濱河造成了極大的恐慌变秦,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件框舔,死亡現(xiàn)場離奇詭異蹦玫,居然都是意外死亡,警方通過查閱死者的電腦和手機刘绣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門樱溉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人纬凤,你說我怎么就攤上這事福贞。” “怎么了停士?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵挖帘,是天一觀的道長。 經(jīng)常有香客問我向瓷,道長,這世上最難降的妖魔是什么舰涌? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任猖任,我火速辦了婚禮,結(jié)果婚禮上瓷耙,老公的妹妹穿的比我還像新娘朱躺。我一直安慰自己,他們只是感情好搁痛,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布长搀。 她就那樣靜靜地躺著,像睡著了一般鸡典。 火紅的嫁衣襯著肌膚如雪源请。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天彻况,我揣著相機與錄音谁尸,去河邊找鬼。 笑死纽甘,一個胖子當(dāng)著我的面吹牛良蛮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播悍赢,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼决瞳,長吁一口氣:“原來是場噩夢啊……” “哼货徙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起皮胡,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤痴颊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后胸囱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體祷舀,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年烹笔,在試婚紗的時候發(fā)現(xiàn)自己被綠了裳扯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡谤职,死狀恐怖饰豺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情允蜈,我是刑警寧澤冤吨,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站饶套,受9級特大地震影響漩蟆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜妓蛮,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一怠李、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蛤克,春花似錦捺癞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至筋现,卻和暖如春唐础,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背矾飞。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工彻犁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人凰慈。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓汞幢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親微谓。 傳聞我的和親對象是個殘疾皇子森篷,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355