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

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

項目升級到 React19 難度如何?生態初探:利用 React-markdown 實現代碼高亮

來源: 責編: 時間:2024-06-14 08:52:13 115觀看
導讀經過前面幾個實踐案例的學習,我們都已經知道,React19 有非常吸引開發者的特性值得我們去升級。但是與此同時,我們也感受到了某些改動確實挺大的。因此在交流群里,大家會有一個比較明顯的擔憂,這種比較大的版本更新,是否會導

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

y9g28資訊網——每日最新資訊28at.com

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

例如,class 語法中,曾經支持了字符串引用 ref。y9g28資訊網——每日最新資訊28at.com

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

這種使用方式因為存在多個缺點,在 2018 年 3 月(V16.3.0)中被標記為不推薦使用,直到現在才明確要刪除代碼。調整之后,開發者需要遷移到 ref 回調函數的使用。這個也并非新功能,而是一直都支持的寫法,因此開發者有充裕的時間來解決這個問題。y9g28資訊網——每日最新資訊28at.com

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

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

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

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

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

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

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

y9g28資訊網——每日最新資訊28at.com

y9g28資訊網——每日最新資訊28at.com

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

y9g28資訊網——每日最新資訊28at.com

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

react-markdown 是 react 生態中,一個非常好用 的 md 文件解析工具。依據這個工具,我們可以輕松創建一個 md 編輯器。y9g28資訊網——每日最新資訊28at.com

y9g28資訊網——每日最新資訊28at.com

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

首先我們在項目中,引入 react-markdown。y9g28資訊網——每日最新資訊28at.com

npm i react-markdown

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

例如,我們可以解析如下格式。y9g28資訊網——每日最新資訊28at.com

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

在頁面中引入 react-markdown。y9g28資訊網——每日最新資訊28at.com

import Markdown from 'react-markdown'

然后直接在 JSX 中使用即可。y9g28資訊網——每日最新資訊28at.com

<Markdown>{input}</Markdown>

渲染結果如下:y9g28資訊網——每日最新資訊28at.com

y9g28資訊網——每日最新資訊28at.com

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

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

安裝插件。y9g28資訊網——每日最新資訊28at.com

npm i remark-gfm

然后直接在組件中使用即可。y9g28資訊網——每日最新資訊28at.com

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

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

y9g28資訊網——每日最新資訊28at.com

我們可以通過查看 html 標簽來查看渲染結果。驗證之后發現已經渲染成功。y9g28資訊網——每日最新資訊28at.com

y9g28資訊網——每日最新資訊28at.com

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

npm i rehype-highlight

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

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

然后在頁面組件中使用。y9g28資訊網——每日最新資訊28at.com

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

此時,我們觀察頁面,發現標簽已經渲染好了。y9g28資訊網——每日最新資訊28at.com

y9g28資訊網——每日最新資訊28at.com

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

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

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

https://highlightjs.tiddlyhost.com

y9g28資訊網——每日最新資訊28at.com

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

y9g28資訊網——每日最新資訊28at.com

搞定!y9g28資訊網——每日最新資訊28at.com

總結

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

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

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

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

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

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

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

標簽:
  • 熱門焦點
Top