AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

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

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

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

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

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

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

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

這種使用方式因為存在多個缺點,在 2018 年 3 月(V16.3.0)中被標記為不推薦使用,直到現(xiàn)在才明確要刪除代碼。調(diào)整之后,開發(fā)者需要遷移到 ref 回調(diào)函數(shù)的使用。這個也并非新功能,而是一直都支持的寫法,因此開發(fā)者有充裕的時間來解決這個問題。VYU28資訊網(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 月被標記為廢棄。由于他是一個性能較差,又容易受到重構(gòu)影響,因此風險會比較大。VYU28資訊網(wǎng)——每日最新資訊28at.com

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

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

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

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

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

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

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

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

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

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

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

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

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

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

npm i react-markdown

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

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

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

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

import Markdown from 'react-markdown'

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

<Markdown>{input}</Markdown>

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

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

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

例如,react-gfm,可以幫助我們解析列表等格式,如下所示:VYU28資訊網(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 || - | - |`

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

npm i remark-gfm

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

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

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

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

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

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

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

npm i rehype-highlight

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

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

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

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

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

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

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

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

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

https://highlightjs.tiddlyhost.com

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

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

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

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

總結(jié)

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

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

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

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

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

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

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

標簽:
  • 熱門焦點
  • 十個可以手動編寫的 JavaScript 數(shù)組 API

    JavaScript 中有很多API,使用得當,會很方便,省力不少。 你知道它的原理嗎? 今天這篇文章,我們將對它們進行一次小總結(jié)?,F(xiàn)在開始吧。1.forEach()forEach()用于遍歷數(shù)組接收一參
  • 只需五步,使用start.spring.io快速入門Spring編程

    步驟1打開https://start.spring.io/,按照屏幕截圖中的內(nèi)容創(chuàng)建項目,添加 Spring Web 依賴項,并單擊“生成”按鈕下載 .zip 文件,為下一步做準備。請在進入步驟2之前進行解壓。圖
  • 19個 JavaScript 單行代碼技巧,讓你看起來像個專業(yè)人士

    今天這篇文章跟大家分享18個JS單行代碼,你只需花幾分鐘時間,即可幫助您了解一些您可能不知道的 JS 知識,如果您已經(jīng)知道了,就當作復習一下,古人云,溫故而知新嘛?,F(xiàn)在,我們就開始今
  • 一個注解實現(xiàn)接口冪等,這樣才優(yōu)雅!

    場景碼猿慢病云管理系統(tǒng)中其實高并發(fā)的場景不是很多,沒有必要每個接口都去考慮并發(fā)高的場景,比如添加住院患者的這個接口,具體的業(yè)務代碼就不貼了,業(yè)務偽代碼如下:圖片上述代碼有
  • Temu起訴SHEIN,跨境電商戰(zhàn)事升級

    來源 | 伯虎財經(jīng)(bohuFN)作者 | 陳平安日前據(jù)外媒報道,拼多多旗下跨境電商平臺Temu正對競爭對手SHEIN提起新訴訟,訴狀稱Shein&ldquo;利用市場支配力量強迫服裝廠商與之簽訂獨家
  • 華為HarmonyOS 4.0將于8月4日發(fā)布 或搭載AI大模型技術(shù)

    華為宣布HarmonyOS4.0將于8月4日正式發(fā)布。此前,華為已經(jīng)針對開發(fā)者公布了HarmonyOS4.0,以便于開發(fā)者提前進行適配,也因此被曝光出了一些新系統(tǒng)的特性
  • 首發(fā)天璣9200+ iQOO Neo8系列發(fā)布首銷售價2299元起

    2023年5月23日晚,iQOO Neo8系列正式發(fā)布。其中,Neo系列首款Pro之作——iQOO Neo8 Pro強悍登場,限時售價3099元起;價位段最強性能手機iQOO Neo8同期上市
  • 利用職權(quán)私自解除被封帳號 Meta開除20多名員工

    11月18日消息,據(jù)外媒援引知情人士表示,過去一年時間內(nèi),F(xiàn)acebook母公司Meta解雇或處罰了20多名員工以及合同工,指控這些人通過內(nèi)部系統(tǒng)以不當方式重置用戶帳號,其
  • 北京:科技教育體驗基地開始登記

      北京“科技館之城”科技教育體驗基地登記和認證工作日前啟動。首批北京科技教育體驗基地擬于2023年全國科普日期間掛牌,后續(xù)還將開展常態(tài)化登記?! ”本┛萍冀逃w驗基
Top