日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

項(xiàng)目升級到 React19 難度如何?生態(tài)初探:利用 React-markdown 實(shí)現(xiàn)代碼高亮

來源: 責(zé)編: 時間:2024-06-14 08:52:13 135觀看
導(dǎo)讀經(jīng)過前面幾個實(shí)踐案例的學(xué)習(xí),我們都已經(jīng)知道,React19 有非常吸引開發(fā)者的特性值得我們?nèi)ド墶5桥c此同時,我們也感受到了某些改動確實(shí)挺大的。因此在交流群里,大家會有一個比較明顯的擔(dān)憂,這種比較大的版本更新,是否會導(dǎo)

經(jīng)過前面幾個實(shí)踐案例的學(xué)習(xí),我們都已經(jīng)知道,React19 有非常吸引開發(fā)者的特性值得我們?nèi)ド墶5桥c此同時,我們也感受到了某些改動確實(shí)挺大的。因此在交流群里,大家會有一個比較明顯的擔(dān)憂,這種比較大的版本更新,是否會導(dǎo)致升級困難?TLh28資訊網(wǎng)——每日最新資訊28at.com

TLh28資訊網(wǎng)——每日最新資訊28at.com

其實(shí)在官方文檔中的升級指引中,有明確提到這個問題,開發(fā)團(tuán)隊(duì)預(yù)計(jì)這些重大更改不會影響到大多數(shù)程序。并且我們看到,react 刪除的功能中,大多數(shù)都是幾年前都已經(jīng)標(biāo)記棄用不建議大家使用的內(nèi)容。TLh28資訊網(wǎng)——每日最新資訊28at.com

例如,class 語法中,曾經(jīng)支持了字符串引用 ref。TLh28資訊網(wǎng)——每日最新資訊28at.com

// beforeclass MyComponent extends React.Component {  componentDidMount() {    this.refs.input.focus();  }  render() {    return <input ref='input' />;  }}

這種使用方式因?yàn)榇嬖诙鄠€缺點(diǎn),在 2018 年 3 月(V16.3.0)中被標(biāo)記為不推薦使用,直到現(xiàn)在才明確要刪除代碼。調(diào)整之后,開發(fā)者需要遷移到 ref 回調(diào)函數(shù)的使用。這個也并非新功能,而是一直都支持的寫法,因此開發(fā)者有充裕的時間來解決這個問題。TLh28資訊網(wǎng)——每日最新資訊28at.com

// afterclass MyComponent extends React.Component {  componentDidMount() {    this.input.focus();  }  render() {    return <input ref={input => this.input = input} />;  }}

又例如,React19 決定要移出 ReactDOM.findDOMNode,這個 API 曾經(jīng)在三方庫中被大量使用,但是他已經(jīng)在 2018 年 10 月被標(biāo)記為廢棄。由于他是一個性能較差,又容易受到重構(gòu)影響,因此風(fēng)險會比較大。TLh28資訊網(wǎng)——每日最新資訊28at.com

// Beforeimport {findDOMNode} from 'react-dom';function AutoselectingInput() {  useEffect(() => {    const input = findDOMNode(this);    input.select()  }, []);  return <input defaultValue="Hello" />;}

在 React18 的版本中,提供了新的方案來替換該用法。TLh28資訊網(wǎng)——每日最新資訊28at.com

// Afterfunction AutoselectingInput() {  const ref = useRef(null);  useEffect(() => {    ref.current.select();  }, []);  return <input ref={ref} defaultValue="Hello" />}

當(dāng)然,其他的變化還有很多,我們就不一一列舉,許多破壞性變更早在 React18 中就已經(jīng)存在,因此對于長期維護(hù)的三方庫而言,React19 的升級壓力非常小。并且為了簡化升級過程,React 發(fā)布了一個過渡版本 React 18.3,該版本功能與 React 18.2 相同,但是增加了對已棄用 API 代碼的刪除,并且調(diào)整了相關(guān)的警告。TLh28資訊網(wǎng)——每日最新資訊28at.com

目前,該過渡版本已經(jīng)發(fā)布了剛好半個月,但已經(jīng)被開發(fā)者大規(guī)模使用了。如下圖所示,這個下載量,已經(jīng)大概相當(dāng)于 Vue 的整體使用水平了,所以整個行業(yè)對于 React19 的升級響應(yīng)非常積極。TLh28資訊網(wǎng)——每日最新資訊28at.com

TLh28資訊網(wǎng)——每日最新資訊28at.com

TLh28資訊網(wǎng)——每日最新資訊28at.com

與此同時,我們還可以利用 react 團(tuán)隊(duì)之前發(fā)布的一個工具用于在代碼中自動替換棄用的寫法,他就是 react-codemod。TLh28資訊網(wǎng)——每日最新資訊28at.com

TLh28資訊網(wǎng)——每日最新資訊28at.com

因此總體來說,我們應(yīng)該可以輕松的在 react19 中應(yīng)用大多數(shù)目前仍然保持維護(hù)的三方工具庫。為了驗(yàn)證我的猜想,我在 React19 項(xiàng)目中引入了許多我正在使用的三方工具庫來嘗試。這里就以 react-markdown 為例,跟大家分享一下在新項(xiàng)目中的運(yùn)用情況。TLh28資訊網(wǎng)——每日最新資訊28at.com

react-markdown 是 react 生態(tài)中,一個非常好用 的 md 文件解析工具。依據(jù)這個工具,我們可以輕松創(chuàng)建一個 md 編輯器。TLh28資訊網(wǎng)——每日最新資訊28at.com

TLh28資訊網(wǎng)——每日最新資訊28at.com

如果你要設(shè)計(jì)一個個人博客,并且需要展示技術(shù)類文章,這個工具可以很好幫助到你。我們這里以展示一個高亮代碼塊為目標(biāo),分享引入過程。TLh28資訊網(wǎng)——每日最新資訊28at.com

首先我們在項(xiàng)目中,引入 react-markdown。TLh28資訊網(wǎng)——每日最新資訊28at.com

npm i react-markdown

有了這個之后,我們就可以在項(xiàng)目中解析一些簡單的 md 格式。TLh28資訊網(wǎng)——每日最新資訊28at.com

例如,我們可以解析如下格式。TLh28資訊網(wǎng)——每日最新資訊28at.com

const input = '# This is a header/n/nAnd this is a paragraph'

在頁面中引入 react-markdown。TLh28資訊網(wǎng)——每日最新資訊28at.com

import Markdown from 'react-markdown'

然后直接在 JSX 中使用即可。TLh28資訊網(wǎng)——每日最新資訊28at.com

<Markdown>{input}</Markdown>

渲染結(jié)果如下:TLh28資訊網(wǎng)——每日最新資訊28at.com

TLh28資訊網(wǎng)——每日最新資訊28at.com

完了之后,有一些比較復(fù)雜的格式,react-markdown 可以引入不同的插件來支持。TLh28資訊網(wǎng)——每日最新資訊28at.com

例如,react-gfm,可以幫助我們解析列表等格式,如下所示:TLh28資訊網(wǎng)——每日最新資訊28at.com

const text2 = `A paragraph with *emphasis* and **strong importance**.> A block quote with ~strikethrough~ and a URL: https://reactjs.org.* Lists* [ ] todo* [x] doneA table:| a | b || - | - |`

安裝插件。TLh28資訊網(wǎng)——每日最新資訊28at.com

npm i remark-gfm

然后直接在組件中使用即可。TLh28資訊網(wǎng)——每日最新資訊28at.com

import remarkGfm from 'remark-gfm'// jsx<Markdown remarkPlugins={[remarkGfm]}>  {text2}</Markdown>

渲染結(jié)果如下。由于我沒有引入 css,因此樣式比較原始。TLh28資訊網(wǎng)——每日最新資訊28at.com

TLh28資訊網(wǎng)——每日最新資訊28at.com

我們可以通過查看 html 標(biāo)簽來查看渲染結(jié)果。驗(yàn)證之后發(fā)現(xiàn)已經(jīng)渲染成功。TLh28資訊網(wǎng)——每日最新資訊28at.com

TLh28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)然,如果我們要渲染代碼快,也需要引入特定的插件,我這里使用了 rehype-highlight。TLh28資訊網(wǎng)——每日最新資訊28at.com

npm i rehype-highlight

安裝好之后,我們可以專門在 .md 文件中編寫好 md 內(nèi)容,在 vite 項(xiàng)目中,可以直接通過如下方式引入 .md 文件。TLh28資訊網(wǎng)——每日最新資訊28at.com

import code from './code.md?raw'

然后在頁面組件中使用。TLh28資訊網(wǎng)——每日最新資訊28at.com

import rehypeHighlight from 'rehype-highlight'// jsx<Markdown   remarkPlugins={[remarkGfm]}   rehypePlugins={[rehypeHighlight]}>{code}</Markdown>

此時,我們觀察頁面,發(fā)現(xiàn)標(biāo)簽已經(jīng)渲染好了。TLh28資訊網(wǎng)——每日最新資訊28at.com

TLh28資訊網(wǎng)——每日最新資訊28at.com

但是此時我們還沒有樣式文件。當(dāng)然,我們可以直接自己根據(jù)對應(yīng)元素中的 class 名來寫樣式。TLh28資訊網(wǎng)——每日最新資訊28at.com

由于設(shè)計(jì)能力有限,我一般引用別人已經(jīng)設(shè)計(jì)好的樣式文件。TLh28資訊網(wǎng)——每日最新資訊28at.com

如下這個網(wǎng)站收集了大量的高亮風(fēng)格,我們直接復(fù)制代碼使用即可。TLh28資訊網(wǎng)——每日最新資訊28at.com

https://highlightjs.tiddlyhost.com

TLh28資訊網(wǎng)——每日最新資訊28at.com

我選擇了一個,把他單獨(dú)寫在一個 css 文件中,并引入對應(yīng)的組件。渲染結(jié)果如下:TLh28資訊網(wǎng)——每日最新資訊28at.com

TLh28資訊網(wǎng)——每日最新資訊28at.com

搞定!TLh28資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

在我嘗試了幾個三方庫之后,總體感受就是基本上都能正常在 React19 項(xiàng)目中使用,即使這些三方庫還沒有升級到 react19。當(dāng)然我也把我某一個 React18 的項(xiàng)目升級到 React19,小幅度更改之后,也成功升級了。TLh28資訊網(wǎng)——每日最新資訊28at.com

因此我預(yù)計(jì)我們有希望在 react19 正式版本發(fā)布之后不久把項(xiàng)目正式升級。TLh28資訊網(wǎng)——每日最新資訊28at.com

但是,一個不太好的消息是,antd 由于使用了一些很早版本就棄用的方法,例如 findDOMNode,還有一些 React19 會棄用的 api, 例如 forwardRef,導(dǎo)致了 antd 一運(yùn)行就各種報錯。許多組件無法正常使用。這種就只能等 antd 適配進(jìn)度了,他們應(yīng)該會很快更新。TLh28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-93695-0.html項(xiàng)目升級到 React19 難度如何?生態(tài)初探:利用 React-markdown 實(shí)現(xiàn)代碼高亮

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 五個提升開發(fā)效率的必備自定義 React Hook,你值得擁有

下一篇: 大廠面試必備:如何輕松實(shí)現(xiàn)分布式Session管理?

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 小米官宣:2023年上半年出貨量中國第一!

    今日早間,小米電視官方微博帶來消息,稱2023年小米電視上半年出貨量達(dá)到了中國第一,同時還表示小米電視的巨屏風(fēng)暴即將開始。“公布一個好消息2023年#小米電視上半年出貨量中國
  • 三言兩語說透設(shè)計(jì)模式的藝術(shù)-單例模式

    寫在前面單例模式是一種常用的軟件設(shè)計(jì)模式,它所創(chuàng)建的對象只有一個實(shí)例,且該實(shí)例易于被外界訪問。單例對象由于只有一個實(shí)例,所以它可以方便地被系統(tǒng)中的其他對象共享,從而減少
  • 企業(yè)采用CRM系統(tǒng)的11個好處

    客戶關(guān)系管理(CRM)軟件可以為企業(yè)提供很多的好處,從客戶保留到提高生產(chǎn)力。  CRM軟件用于企業(yè)收集客戶互動,以改善客戶體驗(yàn)和滿意度。  CRM軟件市場規(guī)模如今超過580
  • JavaScript學(xué)習(xí) -AES加密算法

    引言在當(dāng)今數(shù)字化時代,前端應(yīng)用程序扮演著重要角色,用戶的敏感數(shù)據(jù)經(jīng)常在前端進(jìn)行加密和解密操作。然而,這樣的操作在網(wǎng)絡(luò)傳輸和存儲中可能會受到惡意攻擊的威脅。為了確保數(shù)據(jù)
  • 在線圖片編輯器,支持PSD解析、AI摳圖等

    自從我上次分享一個人開發(fā)仿造稿定設(shè)計(jì)的圖片編輯器到現(xiàn)在,不知不覺已過去一年時間了,期間我經(jīng)歷了裁員失業(yè)、面試找工作碰壁,寒冬下一直沒有很好地履行計(jì)劃.....這些就放在日
  • 深度探索 Elasticsearch 8.X:function_score 參數(shù)解讀與實(shí)戰(zhàn)案例分析

    在 Elasticsearch 中,function_score 可以讓我們在查詢的同時對搜索結(jié)果進(jìn)行自定義評分。function_score 提供了一系列的參數(shù)和函數(shù)讓我們可以根據(jù)需求靈活地進(jìn)行設(shè)置。近期
  • ESG的面子與里子

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之三伏大幕拉起,各地高溫預(yù)警不絕,但處于厄爾尼諾大&ldquo;烤&rdquo;之下的除了眾生,還有各大企業(yè)發(fā)布的ESG報告。ESG是&ldquo;環(huán)境保
  • 首發(fā)天璣9200+ iQOO Neo8系列發(fā)布首銷售價2299元起

    2023年5月23日晚,iQOO Neo8系列正式發(fā)布。其中,Neo系列首款Pro之作——iQOO Neo8 Pro強(qiáng)悍登場,限時售價3099元起;價位段最強(qiáng)性能手機(jī)iQOO Neo8同期上市
  • 榮耀Magicbook V 14 2021曙光藍(lán)版本正式開售,擁有觸摸屏

    榮耀 Magicbook V 14 2021 曙光藍(lán)版本正式開售,搭載 i7-11390H 處理器與 MX450 顯卡,配備 16GB 內(nèi)存與 512GB SSD,重 1.48kg,厚 14.5mm,具有 1.5mm 鍵盤鍵程、
Top 主站蜘蛛池模板: 沁阳市| 临邑县| 宿松县| 新巴尔虎右旗| 苗栗市| 贞丰县| 荔浦县| 锦州市| 北海市| 绵阳市| 广东省| 中宁县| 徐州市| 萝北县| 彭泽县| 泰安市| 汉沽区| 靖边县| 莲花县| 绥德县| 桓仁| 乐陵市| 大姚县| 清流县| 通海县| 东宁县| 铜陵市| 门头沟区| 临沭县| 重庆市| 庆元县| 尉氏县| 通山县| 当阳市| 图木舒克市| 龙海市| 三都| 信丰县| 长兴县| 东丽区| 昂仁县|