国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

基于React的可編輯在線簡(jiǎn)歷模板

codecook / 2866人閱讀

摘要:總結(jié)最后介紹一下整個(gè)頁(yè)面的功能可以對(duì)每個(gè)字段進(jìn)行編輯可以對(duì)列表字段隨意添加移動(dòng)刪除可以直接使用的語(yǔ)法來(lái)插入鏈接可以上傳本地頭圖可以保存為三種格式在線預(yù)覽地址戳我倉(cāng)庫(kù)戳我,歡迎

在線預(yù)覽地址:戳我

GitHub倉(cāng)庫(kù): 戳我,歡迎star

介紹

技術(shù)棧為純React。接下來(lái)介紹一些稍微重要的技術(shù)點(diǎn):

contentEditable

核心的編輯功能用到了HTML5的 contentEditable 屬性,但是在 react 中,你不能直接寫下面的這種組件

hello world

這會(huì)被 react 提示警告:

試想,平時(shí)的 react 組件的 children 都是我們寫好內(nèi)容并控制更新,而不是交給用戶去隨意更改。就算是可以隨意更改的 組件,它的初始值也是一個(gè) html 的 attribute 而不是 dom 的屬性。

回到 contentEditable,一個(gè)帶 contentEditable 的組件被更改后,其 children 的內(nèi)容實(shí)際上并沒(méi)有隨著 dom 的更改而更新,這有點(diǎn)類似非受控組件,但是非受控組件 并不帶 children,剛才說(shuō)到的,用一個(gè) html attribute 來(lái)初始值,并通過(guò) onChange 來(lái)獲取 value 的更新。

然后我在 npm 上隨便翻了下,果然有可以直接用的 contentEditable 組件,看了下源碼,核心思想就是:

寫一個(gè)普通的元素,比如 span,賦予 contentEditable 屬性,不帶 children ,然后用 dangerouslySetInnerHTML 來(lái)初始化,通過(guò) onInput 來(lái)監(jiān)聽每次修改,通過(guò) ref 來(lái)獲取 innerHTML 就可以將編輯后的內(nèi)容傳遞給 props 中的 onChange,沒(méi)有了 children 的冗余,組件只是在維護(hù)一份 innerHTML。這就解決了普通的 contentEditable 的兩大痛點(diǎn):1. 非受控 2. 狀態(tài)冗余。

這里我沒(méi)有直接使用 npm 上現(xiàn)成的組件庫(kù),因?yàn)樾枰容^多的鉤子函數(shù)和自定義的功能,所以按照這個(gè)思路定制了一個(gè)具有 contentEditable 屬性的組件。

List

還有一個(gè)問(wèn)題是 List,需求是這樣:右鍵單擊 List 中任意一個(gè) item 會(huì)彈出菜單,可以調(diào)整 List 中 items 的順序,如圖:

通過(guò)維護(hù)一個(gè)類似 key 的 index prop 來(lái)標(biāo)注所有 item 的順序,item 根據(jù)初始化的順序有一個(gè)從 1 開始的 index prop,在 List 的 state 中維護(hù)一個(gè)數(shù)組來(lái)記錄所有 item 的順序,插入 / 移動(dòng) / 刪除對(duì)應(yīng)的 item 時(shí)更新數(shù)組,render 函數(shù)再根據(jù)數(shù)組 中標(biāo)記的順序來(lái)渲染,每次只渲染移動(dòng)的 item。

總結(jié)

最后介紹一下整個(gè)頁(yè)面的功能:

可以對(duì)每個(gè)字段進(jìn)行編輯

可以對(duì)列表字段隨意添加移動(dòng)刪除

可以直接使用 markdown 的 []() 語(yǔ)法來(lái)插入鏈接

可以上傳本地頭圖

可以保存為 PNG, PDF, HTML 三種格式

在線預(yù)覽地址:戳我

GitHub倉(cāng)庫(kù): 戳我,歡迎star

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/93389.html

相關(guān)文章

  • GitHub 值得收藏的前端項(xiàng)目[每月更新...]

    摘要:也是一款優(yōu)秀的響應(yīng)式框架站點(diǎn)所使用的一套框架為微信服務(wù)量身設(shè)計(jì)的一套框架一組很小的,響應(yīng)式的組件,你可以在網(wǎng)頁(yè)的項(xiàng)目上到處使用一個(gè)可定制的文件,使瀏覽器呈現(xiàn)的所有元素,更一致和符合現(xiàn)代標(biāo)準(zhǔn)。 GitHub 值得收藏的前端項(xiàng)目 整理與收集的一些比較優(yōu)秀github項(xiàng)目,方便自己閱讀,順便分享出來(lái),大家一起學(xué)習(xí),本篇文章會(huì)持續(xù)更新,版權(quán)歸原作者所有。歡迎github star與fork 預(yù)...

    maxmin 評(píng)論0 收藏0
  • 其實(shí),前端還可以這樣做簡(jiǎn)歷

    摘要:接下來(lái),亮出自己做的簡(jiǎn)歷。登錄進(jìn)入后,就可以選擇一個(gè)你喜歡的簡(jiǎn)歷模板進(jìn)行制作簡(jiǎn)歷了。將頁(yè)面左邊的工具欄拿掉,然后將簡(jiǎn)歷寬度放大到接近瀏覽器寬度即可達(dá)到像素最高的效果。此外,會(huì)自動(dòng)保存你做的簡(jiǎn)歷,方便下次編輯。 以下文章摘自我的博客,原文鏈接 下面的簡(jiǎn)歷圖片不上傳了,想看的點(diǎn)擊原文鏈接就能看到了。 簡(jiǎn)述下原理:首先找一個(gè)可以在線制作簡(jiǎn)歷并提供簡(jiǎn)歷模板的網(wǎng)站,然后在模板上填好自己的信息,并...

    zhaochunqi 評(píng)論0 收藏0
  • vue開發(fā)可在線編輯簡(jiǎn)歷的webApp

    摘要:例如第二步在根目錄下也就是中添加一個(gè)文件夾,文件夾名稱為第一步中二級(jí)域名的前綴,也就是然后將你的項(xiàng)目或者其他項(xiàng)目添加入該文件夾中。 項(xiàng)目初始 在一個(gè)陽(yáng)光明媚的下午,學(xué)院就業(yè)指導(dǎo)老師讓我們每個(gè)人做一份簡(jiǎn)歷,然后打印上交。后回到宿舍,苦苦在網(wǎng)上尋找,未果。因?yàn)椴灰X的模板太丑,好看的模板得花錢...,像我等窮逼,哪里有什么閑錢。于是,果斷下載了個(gè)丑不拉幾的模板,打開word隨便填了填交了上...

    CatalpaFlat 評(píng)論0 收藏0
  • react文檔 Hello World

    摘要:最小的示例如下它會(huì)顯示一個(gè)的標(biāo)題在頁(yè)面上。指南的指南在這個(gè)指南中,我們將會(huì)檢驗(yàn)的建筑模塊和元素和組件。這是循序漸進(jìn)的指南關(guān)于原則的第一章。它可能會(huì)花半小時(shí)到一個(gè)小時(shí),但是好處是你不會(huì)感覺(jué)同時(shí)在學(xué)習(xí)和。注意此指南偶爾在示例中采用新的語(yǔ)法。 Hello World 最小的 React 示例如下: ReactDOM.render( Hello, world!, documen...

    xuhong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<