react hook 使用百度富文本編輯器ueditor

打開官網(wǎng)ueditor官網(wǎng)

https://github.com/fex-team/ueditor#ueditor

看下圖下載蟹倾,并解壓出來


01.jpg

02.jpg

然后在此文件打開命令窗口

//如果電腦沒有安裝grunt 執(zhí)行以下第一個命令
npm install grunt -g
//然后給ueditor安裝依賴
npm install
//再執(zhí)行
grunt default

成功的命令窗口


03.jpg

此時文件目錄如下圖


04.jpg

然后把dist文件下的目錄 utf8-php 復(fù)制到react項目里的public文件夾里,并改名為ueditor


05.jpg

06.jpg

07.jpg

然后在項目的public的index.html引入以下代碼

<script type="text/javascript" src="/ueditor/ueditor.config.js"></script>
<script type="text/javascript" src="/ueditor/ueditor.all.js"></script>

//上面的如果識別不了中文可以改引入以下代碼
<!-- <script src="/ueditor3/ueditor.config.js"></script>
     <script src="/ueditor3/ueditor.all.js"></script>
     <script src="/ueditor3/lang/zh-cn/zh-cn.js"></script>
     <script src="/ueditor3/ueditor.parse.min.js"></script> -->
08.jpg

然后修改public里的ueditor文件的ueditor.config.js诀豁,如下圖


09.jpg

toolbars的配置代碼

// 工具欄上的所有的功能按鈕和下拉框踊餐,可以在new編輯器的實(shí)例時選擇自己需要的重新定義
    toolbars: [[
      'fullscreen', 'source', '|', 'undo', 'redo', '|',
      'bold', 'italic', 'underline', 'fontborder', 'strikethrough', 'superscript', 'subscript', 'removeformat', 'formatmatch', 'autotypeset', 'blockquote', 'pasteplain', '|', 'forecolor', 'backcolor', 'insertorderedlist', 'insertunorderedlist', 'selectall', 'cleardoc', '|',
      'rowspacingtop', 'rowspacingbottom', 'lineheight', '|',
      'customstyle', 'paragraph', 'fontfamily', 'fontsize', '|',
      'directionalityltr', 'directionalityrtl', 'indent', '|',
      'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 'touppercase', 'tolowercase', '|',
      'link', 'unlink', 'anchor', '|', 'imagenone', 'imageleft', 'imageright', 'imagecenter', '|',
      'simpleupload', 'insertimage', 'emotion', 'scrawl', 'insertvideo', 'music', 'attachment', 'map', 'gmap', 'insertframe', 'insertcode', 'webapp', 'pagebreak', 'template', 'background', '|',
      'horizontal', 'date', 'time', 'spechars', 'snapscreen', 'wordimage', '|',
      'inserttable', 'deletetable', 'insertparagraphbeforetable', 'insertrow', 'deleterow', 'insertcol', 'deletecol', 'mergecells', 'mergeright', 'mergedown', 'splittocells', 'splittorows', 'splittocols', 'charts', '|',
      'print', 'preview', 'searchreplace', 'drafts', 'help'
    ]],

封裝ueditor組件

import React, {useEffect,useImperativeHandle,forwardRef} from 'react'
let editor = null
 
const UEditor = (props,ref) => {
    useEffect(() => {
        setConfig(props.initData,props.config,props.setContent)
        return ()=>{
            editor.destroy();
            // editor.removeListener(); //不要打開乱豆,否則返回有問題報錯
        }
    },[props.initData,props.config,props.setContent])
    // 初始化編輯器
    const setConfig = (initData,config,setContent) => {
        editor = window.UE &&window.UE.getEditor('editor', {
            // enableAutoSave: false,
            // autoHeightEnabled: false,
            autoFloatEnabled: 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="editor" type="text/plain" />
    )
}
 
export default forwardRef(UEditor) 

組件的使用


import React,{useState,useRef} from 'react'
import UEditor from '@/UEditor' 
import './PublishArticle.less'
import {Form,Button,Input,message,Select,Radio} from 'antd'
const {Item} = Form
const { Option } = Select;
function PublishArticle() {
    const [form] = Form.useForm();
    const ueRef = useRef(null)
    const tailLayout = {
        wrapperCol: { offset: 10, span: 8 },
    };
    //選擇欄目
    const onGenderChange = value => {
        console.log(value);
    };
    const [radioVal, setRadioVal] = useState(1)
    //編輯器的寬度
    const [config] = useState({
        initialFrameWidth: '100%',
        initialFrameHeight: 400
    })
    //編輯器的默認(rèn)值
    const [initData] = useState('')
    //富文本失焦就觸發(fā)setContent函數(shù)設(shè)置表單的content內(nèi)容
    const setContent = (e)=>{
        form.setFieldsValue({
            content: ueRef.current.getUEContent()
        })
    }
     //發(fā)布
    const onFinish = (values) => {
        console.log(values);
        message.error('發(fā)布未成功')
    };
    return (
        <div className="PublishArticle-wrap">
            <div className="title">發(fā)布文章</div>
            <Form preserve={false}  style={{width:'750px'}} autoComplete="off" form={form} onFinish={onFinish}>
                <Item name="unit"  label="選擇欄目:" rules={[{ required: true,message: '選擇欄目必選' }]}>
                    <Select
                    placeholder="請選擇選擇欄目"
                    onChange={onGenderChange}
                    allowClear
                    style={{width:"200px"}}
                    >
                        <Option value="1">健康</Option>
                        <Option value="2">子女</Option>
                    </Select>
                </Item>
                <Item name="type"  label="首頁推薦:" initialValue={1} rules={[{ required: true,message: '首頁推薦必填' }]}>
                    <Radio.Group style={{width: '200px'}} onChange={(e)=>setRadioVal(e.target.value)} value={radioVal}>
                        <Radio value={1} checked>關(guān)閉</Radio>
                        <Radio value={2}>開啟</Radio>
                    </Radio.Group>
                </Item>
                <Item name="name"  label="文章標(biāo)題:" rules={[{ required: true,message: '文章標(biāo)題必填' }]}>
                    <Input placeholder="請輸入文章標(biāo)題" allowClear/>
                </Item>
                <Item name="content" label="文章內(nèi)容:" initialValue={initData} rules={[{required: true,message: '文章內(nèi)容必填' }]}>
                    <UEditor id="container" ref={ueRef} config={config} initData={initData} setContent={(e)=>setContent(e)}></UEditor>
                </Item>
                <Item {...tailLayout}>
                    <Button type="primary" htmlType="submit">發(fā)布</Button>
                </Item>
            </Form>
        </div>
    )
}

export default PublishArticle

看看顯示效果


10.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末伶棒,一起剝皮案震驚了整個濱河市躺盛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌形帮,老刑警劉巖槽惫,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件周叮,死亡現(xiàn)場離奇詭異,居然都是意外死亡界斜,警方通過查閱死者的電腦和手機(jī)仿耽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來各薇,“玉大人项贺,你說我怎么就攤上這事∏团校” “怎么了开缎?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長林螃。 經(jīng)常有香客問我奕删,道長,這世上最難降的妖魔是什么疗认? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任完残,我火速辦了婚禮,結(jié)果婚禮上横漏,老公的妹妹穿的比我還像新娘谨设。我一直安慰自己,他們只是感情好缎浇,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布扎拣。 她就那樣靜靜地躺著,像睡著了一般华畏。 火紅的嫁衣襯著肌膚如雪鹏秋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天亡笑,我揣著相機(jī)與錄音侣夷,去河邊找鬼。 笑死仑乌,一個胖子當(dāng)著我的面吹牛百拓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晰甚,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼衙传,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了厕九?” 一聲冷哼從身側(cè)響起蓖捶,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扁远,沒想到半個月后俊鱼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刻像,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年并闲,在試婚紗的時候發(fā)現(xiàn)自己被綠了细睡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡帝火,死狀恐怖溜徙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情犀填,我是刑警寧澤蠢壹,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站宏浩,受9級特大地震影響知残,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜比庄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一求妹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧佳窑,春花似錦制恍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至溉委,卻和暖如春鹃唯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瓣喊。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工坡慌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人藻三。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓洪橘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親棵帽。 傳聞我的和親對象是個殘疾皇子熄求,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評論 2 351