react hook結(jié)合Ueditor實(shí)現(xiàn)富文本編輯器

首先在官網(wǎng)上下載相關(guān)插件,但是有幾點(diǎn)需要改動(dòng)姻成,那我直接把我改好的貼出出來(lái)吧插龄,希望可以幫到大家。

點(diǎn)擊下載Ueditor

然后在index.html頁(yè)面里引入js和css


    <!-- 百度富文本腳本 -->
    <script type="text/javascript" src="<%= context.config.publicPath +'ueditor/ueditor.config.js'%>"></script>
    <script type="text/javascript" src="<%= context.config.publicPath +'ueditor/ueditor.all.js'%>"></script>

二次封裝組件代碼如下

/* eslint-disable func-names */
/* eslint-disable prefer-const */
/* eslint-disable @typescript-eslint/no-use-before-define */
import React, { useEffect, useImperativeHandle, forwardRef } from 'react';

let editor = null;

const toolbars = [
  [
    'source',
    '|',
    'undo',
    'redo',
    '|',
    'bold',
    'italic',
    'underline',
    // 'fontborder',
    'strikethrough',
    'removeformat',
    // 'formatmatch',
    // 'autotypeset',
    'blockquote',
    // 'pasteplain',
    '|',
    'forecolor',
    'backcolor',
    'insertorderedlist',
    'insertunorderedlist',
    '|',
    'paragraph',
    'fontfamily',
    'fontsize',
    '|',
    'indent',
    'justifyleft',
    'justifycenter',
    'justifyright',
    'justifyjustify',
    '|',
    // 'touppercase', 'tolowercase', '|',
    'link',
    // 'unlink',
    '|',
    'imagenone',
    'imageleft',
    'imageright',
    'imagecenter',
    '|',
    'simpleupload',
    'insertimage',
    // '|',
    // 'horizontal',
    // 'inserttable', 'deletetable', 'insertparagraphbeforetable', 'insertrow', 'deleterow', 'insertcol', 'deletecol', 'mergecells', 'mergeright', 'mergedown', 'splittocells', 'splittorows', 'splittocols', '|',
    // 'searchreplace'
  ],
];

function UEditor(props, ref){
  useEffect(() => {
    if (window.UE.getEditor) {
      setConfig(props.initData, props.config, props.setContent);
    }
    
    return () => {
      editor.destroy(props.id);
      // 組件銷毀時(shí)候移除頁(yè)面中id的textarea
      let tagElement = window.document.querySelector(`#ueditor-container`);
      tagElement.parentElement.removeChild(tagElement);
      // editor.removeListener(); //不要打開(kāi)佣渴,否則返回有問(wèn)題報(bào)錯(cuò)
    };
  }, []);


  // 初始化編輯器
  const setConfig = (initData, config, setContent) => {
    editor =
      window.UE &&
      window.UE.getEditor('ueditor-container', {
        toolbars,
        // enableAutoSave: false,
        maximumWords: 1000000,
        scaleEnabled: false,
        autoFloatEnabled: false,
        autoHeightEnabled: false,
        initialFrameHeight: (config && config.initialFrameHeight) || 450,
        initialFrameWidth: (config && config.initialFrameWidth) || '100%',
        zIndex: 1,
      }
    );
    editor.ready(() => {
      if (initData) {
        editor.setContent(initData); // 設(shè)置默認(rèn)值/表單回顯
      }
    });
    editor.addListener('blur', function () {
      setContent(editor.getContent());
    });
  };

  // 暴露方法
  useImperativeHandle(ref, () => ({
    getUEContent: () => {
      return editor.getContent(); // 獲取編輯器內(nèi)容
    },
  }));


  return <script id="ueditor-container" type="text/plain" />;
};

export default forwardRef(UEditor);

具體使用方法

/* eslint-disable react/no-danger */
/* eslint-disable import/no-unresolved */
/* eslint-disable consistent-return */
/* eslint-disable no-eval */
/* eslint-disable no-param-reassign */
/* eslint-disable array-callback-return */
/* eslint-disable react/self-closing-comp */
import React, {useState, useRef} from 'react';
import Ueditor from '@components/Editor/index2.js';
import styles from './contentModule.less';

function ContentModule(props) {
  const {
    editorText = '', 
    setEditorText= ()=>{},
  } = props;

  const ueRef = useRef(null)

  const [config] = useState({
    initialFrameWidth: '100%',
    initialFrameHeight: 400
  })
  
  // 富文本失焦就觸發(fā)setContent函數(shù)設(shè)置表單的content內(nèi)容
  const setContent = (content)=>{
    setEditorText(content);
  }

  return (
    <div className={styles.ueditor}>
      <Ueditor 
        id="container" 
        ref={ueRef} 
        config={config} 
        initData={editorText} 
        setContent={(e)=>setContent(e)}>
        </Ueditor>
    </div>
  );
}

export default ContentModule;
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末辫狼,一起剝皮案震驚了整個(gè)濱河市初斑,隨后出現(xiàn)的幾起案子辛润,更是在濱河造成了極大的恐慌,老刑警劉巖见秤,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砂竖,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡鹃答,警方通過(guò)查閱死者的電腦和手機(jī)乎澄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)测摔,“玉大人置济,你說(shuō)我怎么就攤上這事》姘耍” “怎么了浙于?”我有些...
    開(kāi)封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)挟纱。 經(jīng)常有香客問(wèn)我羞酗,道長(zhǎng),這世上最難降的妖魔是什么紊服? 我笑而不...
    開(kāi)封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任檀轨,我火速辦了婚禮,結(jié)果婚禮上欺嗤,老公的妹妹穿的比我還像新娘参萄。我一直安慰自己,他們只是感情好煎饼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布讹挎。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪淤袜。 梳的紋絲不亂的頭發(fā)上痒谴,一...
    開(kāi)封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音铡羡,去河邊找鬼积蔚。 笑死,一個(gè)胖子當(dāng)著我的面吹牛烦周,可吹牛的內(nèi)容都是我干的尽爆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼读慎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼漱贱!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起夭委,我...
    開(kāi)封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤幅狮,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后株灸,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體崇摄,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年慌烧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了逐抑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡屹蚊,死狀恐怖厕氨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情汹粤,我是刑警寧澤命斧,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站玄括,受9級(jí)特大地震影響冯丙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜遭京,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一胃惜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧哪雕,春花似錦船殉、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)挨厚。三九已至,卻和暖如春糠惫,著一層夾襖步出監(jiān)牢的瞬間疫剃,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工硼讽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留巢价,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓固阁,卻偏偏與公主長(zhǎng)得像壤躲,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子备燃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容