当前位置:首页 > 科技  > 软件

项目升级到 React19 难度如何?生态初探:利用 React-markdown 实现代码高亮

来源: 责编: 时间:2024-06-14 08:52:13 74观看
导读经过前面几个实践案例的学习,我们都已经知道,React19 有非常吸引开发者的特性值得我们去升级。但是与此同时,我们也感受到了某些改动确实挺大的。因此在交流群里,大家会有一个比较明显的担忧,这种比较大的版本更新,是否会导

经过前面几个实践案例的学习,我们都已经知道,React19 有非常吸引开发者的特性值得我们去升级。但是与此同时,我们也感受到了某些改动确实挺大的。因此在交流群里,大家会有一个比较明显的担忧,这种比较大的版本更新,是否会导致升级困难?n9Z28资讯网——每日最新资讯28at.com

n9Z28资讯网——每日最新资讯28at.com

其实在官方文档中的升级指引中,有明确提到这个问题,开发团队预计这些重大更改不会影响到大多数程序。并且我们看到,react 删除的功能中,大多数都是几年前都已经标记弃用不建议大家使用的内容。n9Z28资讯网——每日最新资讯28at.com

例如,class 语法中,曾经支持了字符串引用 ref。n9Z28资讯网——每日最新资讯28at.com

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

这种使用方式因为存在多个缺点,在 2018 年 3 月(V16.3.0)中被标记为不推荐使用,直到现在才明确要删除代码。调整之后,开发者需要迁移到 ref 回调函数的使用。这个也并非新功能,而是一直都支持的写法,因此开发者有充裕的时间来解决这个问题。n9Z28资讯网——每日最新资讯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 月被标记为废弃。由于他是一个性能较差,又容易受到重构影响,因此风险会比较大。n9Z28资讯网——每日最新资讯28at.com

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

在 React18 的版本中,提供了新的方案来替换该用法。n9Z28资讯网——每日最新资讯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 代码的删除,并且调整了相关的警告。n9Z28资讯网——每日最新资讯28at.com

目前,该过渡版本已经发布了刚好半个月,但已经被开发者大规模使用了。如下图所示,这个下载量,已经大概相当于 Vue 的整体使用水平了,所以整个行业对于 React19 的升级响应非常积极。n9Z28资讯网——每日最新资讯28at.com

n9Z28资讯网——每日最新资讯28at.com

n9Z28资讯网——每日最新资讯28at.com

与此同时,我们还可以利用 react 团队之前发布的一个工具用于在代码中自动替换弃用的写法,他就是 react-codemod。n9Z28资讯网——每日最新资讯28at.com

n9Z28资讯网——每日最新资讯28at.com

因此总体来说,我们应该可以轻松的在 react19 中应用大多数目前仍然保持维护的三方工具库。为了验证我的猜想,我在 React19 项目中引入了许多我正在使用的三方工具库来尝试。这里就以 react-markdown 为例,跟大家分享一下在新项目中的运用情况。n9Z28资讯网——每日最新资讯28at.com

react-markdown 是 react 生态中,一个非常好用 的 md 文件解析工具。依据这个工具,我们可以轻松创建一个 md 编辑器。n9Z28资讯网——每日最新资讯28at.com

n9Z28资讯网——每日最新资讯28at.com

如果你要设计一个个人博客,并且需要展示技术类文章,这个工具可以很好帮助到你。我们这里以展示一个高亮代码块为目标,分享引入过程。n9Z28资讯网——每日最新资讯28at.com

首先我们在项目中,引入 react-markdown。n9Z28资讯网——每日最新资讯28at.com

npm i react-markdown

有了这个之后,我们就可以在项目中解析一些简单的 md 格式。n9Z28资讯网——每日最新资讯28at.com

例如,我们可以解析如下格式。n9Z28资讯网——每日最新资讯28at.com

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

在页面中引入 react-markdown。n9Z28资讯网——每日最新资讯28at.com

import Markdown from 'react-markdown'

然后直接在 JSX 中使用即可。n9Z28资讯网——每日最新资讯28at.com

<Markdown>{input}</Markdown>

渲染结果如下:n9Z28资讯网——每日最新资讯28at.com

n9Z28资讯网——每日最新资讯28at.com

完了之后,有一些比较复杂的格式,react-markdown 可以引入不同的插件来支持。n9Z28资讯网——每日最新资讯28at.com

例如,react-gfm,可以帮助我们解析列表等格式,如下所示:n9Z28资讯网——每日最新资讯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 || - | - |`

安装插件。n9Z28资讯网——每日最新资讯28at.com

npm i remark-gfm

然后直接在组件中使用即可。n9Z28资讯网——每日最新资讯28at.com

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

渲染结果如下。由于我没有引入 css,因此样式比较原始。n9Z28资讯网——每日最新资讯28at.com

n9Z28资讯网——每日最新资讯28at.com

我们可以通过查看 html 标签来查看渲染结果。验证之后发现已经渲染成功。n9Z28资讯网——每日最新资讯28at.com

n9Z28资讯网——每日最新资讯28at.com

当然,如果我们要渲染代码快,也需要引入特定的插件,我这里使用了 rehype-highlight。n9Z28资讯网——每日最新资讯28at.com

npm i rehype-highlight

安装好之后,我们可以专门在 .md 文件中编写好 md 内容,在 vite 项目中,可以直接通过如下方式引入 .md 文件。n9Z28资讯网——每日最新资讯28at.com

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

然后在页面组件中使用。n9Z28资讯网——每日最新资讯28at.com

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

此时,我们观察页面,发现标签已经渲染好了。n9Z28资讯网——每日最新资讯28at.com

n9Z28资讯网——每日最新资讯28at.com

但是此时我们还没有样式文件。当然,我们可以直接自己根据对应元素中的 class 名来写样式。n9Z28资讯网——每日最新资讯28at.com

由于设计能力有限,我一般引用别人已经设计好的样式文件。n9Z28资讯网——每日最新资讯28at.com

如下这个网站收集了大量的高亮风格,我们直接复制代码使用即可。n9Z28资讯网——每日最新资讯28at.com

https://highlightjs.tiddlyhost.com

n9Z28资讯网——每日最新资讯28at.com

我选择了一个,把他单独写在一个 css 文件中,并引入对应的组件。渲染结果如下:n9Z28资讯网——每日最新资讯28at.com

n9Z28资讯网——每日最新资讯28at.com

搞定!n9Z28资讯网——每日最新资讯28at.com

总结

在我尝试了几个三方库之后,总体感受就是基本上都能正常在 React19 项目中使用,即使这些三方库还没有升级到 react19。当然我也把我某一个 React18 的项目升级到 React19,小幅度更改之后,也成功升级了。n9Z28资讯网——每日最新资讯28at.com

因此我预计我们有希望在 react19 正式版本发布之后不久把项目正式升级。n9Z28资讯网——每日最新资讯28at.com

但是,一个不太好的消息是,antd 由于使用了一些很早版本就弃用的方法,例如 findDOMNode,还有一些 React19 会弃用的 api, 例如 forwardRef,导致了 antd 一运行就各种报错。许多组件无法正常使用。这种就只能等 antd 适配进度了,他们应该会很快更新。n9Z28资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-93695-0.html项目升级到 React19 难度如何?生态初探:利用 React-markdown 实现代码高亮

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 五个提升开发效率的必备自定义 React Hook,你值得拥有

下一篇: 大厂面试必备:如何轻松实现分布式Session管理?

标签:
  • 热门焦点
  • K8S | Service服务发现

    K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 让我们一起聊聊文件的操作

    让我们一起聊聊文件的操作

    文件【1】文件是什么?文件是保存数据的地方,是数据源的一种,比如大家经常使用的word文档、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存数据,它既可以保
  • 共享单车的故事讲到哪了?

    共享单车的故事讲到哪了?

    来源丨海克财经与共享充电宝相差不多,共享单车已很久没有被国内热点新闻关照到了。除了一再涨价和用户直呼用不起了。近日多家媒体再发报道称,成都、天津、郑州等地多个共享单
  • 大厂卷向扁平化

    大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • 冯提莫签约抖音公会 前“斗鱼一姐”消失在直播间

    冯提莫签约抖音公会 前“斗鱼一姐”消失在直播间

    来源:直播观察提起&ldquo;冯提莫&rdquo;这个名字,很多网友或许听过,但应该不记得她是哪位主播了。其实,作为曾经的&ldquo;斗鱼一姐&rdquo;,冯提莫在游戏直播的年代影响力不输于现
  • 余承东:AI大模型技术的发展将会带来下一代智能终端操作系统的智慧体验

    余承东:AI大模型技术的发展将会带来下一代智能终端操作系统的智慧体验

    8月4日消息,2023年华为开发者大会(HDC.Together)今天正式开幕,华为发布HarmonyOS 4、全新升级的鸿蒙开发套件、HarmonyOS Next开发者预览版本等一系列
  • iQOO Neo8 Pro即将开售:到手价3099元起 安卓性能最强旗舰

    iQOO Neo8 Pro即将开售:到手价3099元起 安卓性能最强旗舰

    5月23日,iQOO如期举行了新品发布会,全新的iQOO Neo8系列也正式与大家见面,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更
  • iQOO Neo8系列新品发布会

    iQOO Neo8系列新品发布会

    旗舰双芯 更强更Pro
  • iQOO Neo8 Pro抢先上架:首发天玑9200+ 安卓性能之王

    iQOO Neo8 Pro抢先上架:首发天玑9200+ 安卓性能之王

    经过了一段时间的密集爆料,昨日iQOO官方如期对外宣布:将于5月23日推出全新的iQOO Neo8系列新品,官方称这是一款拥有旗舰级性能调校的作品。随着发布时
Top
Baidu
map