首页
学习
活动
专区
圈层
工具
发布

React v17有什么新功能?

您要么必须继续使用旧版本,要么需要将整个应用程序升级到新版本。因此,如果新更新中引入了重大更改,并且您打算迁移到新版本,则必须更改代码库,尤其是在代码库很大的情况下。...React 团队已使用React 17 解决了这些问题中的大多数问题。...,现在可以安全嵌套使用不同版本的 React 构建的应用程序。...它仍然提供一些好处,例如: 您不需要导入 React 改善捆绑包尺寸 如果您想阅读更多有关此新转换的信息,请查看React团队的这篇博客文章:https://reactjs.org/blog/2020/...; } 最初,这种行为只适用于类和函数组件,但是在新版本中,forwardRef memo 组件也加入了这个功能,使它们的行为与常规的类和函数组件一致,请注意,如果您故意不进行任何渲染

3.3K31

React v17.0 正式发布!

并且,在 React 17 之前,如果在同一个页面上使用不同的 React 版本(可以这么做,但是有风险),会导致事件问题的出现,会有一些未知的风险。 我们正在修复 React v17 中的许多问题。...欢迎使用其他工具的小伙伴通过 PR 的形式提供 Demo。 注意 我们将其他特性推迟到了 React v17 之后。这个版本的目标就是实现渐进式升级。...如果升级到 17 很困难,那就违背了此版本的目的。 事件委托的变更 为了实现渐进式升级,我们需要对 React 的事件系统进行修改。React 17 是一个重要版本,因为这个版本的可能存在破坏性更改。...安装 使用 npm 安装 React v17: npm install react@17.0.0 react-dom@17.0.0 使用 yarn 安装 React v17: yarn add react...(@alexmckenley提交于 #18783) 修复函数组件抛出异常时状态泄露的问题。

1.8K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    React 进阶 - 事件系统

    对于不同的浏览器,对事件存在不同的兼容性,React 想实现一个兼容全浏览器的框架, 为了实现这个目标就需要创建一个兼容全浏览器的事件系统,以此抹平不同浏览器的差异 v17 之前 React 事件都是绑定在...document 上,v17 之后 React 把事件绑定在应用对应的容器 container 上,将事件绑定在同一容器统一管理,防止很多事件直接绑定在原生的 DOM 元素上 造成一些不可控的情况...由于不是绑定在真实的 DOM 上,所以 React 需要模拟一套事件流:事件捕获 -> 事件源 -> 事件冒泡,也包括重写一下事件源对象 event 事件系统,大部分处理逻辑都在底层处理了,对后期的 SSR...对于不同的事件,有不同的处理逻辑;对应的事件源对象也有所不同,React 的事件和事件源是自己合成的,所以对于不同事件需要不同的事件插件处理。...,是 React 统一的事件处理函数 dispatchEvent ,React 需要一个统一流程去代理事件逻辑,包括 React 批量更新等逻辑。

    1.8K10

    react源码分析:babel如何解析jsx

    同作为MVVM框架,React相比于Vue来讲,上手更需要JavaScript功底深厚一些,本系列将阅读React相关源码,从jsx -> VDom -> RDOM等一些列的过程,将会在本系列中一一讲解工欲善其事...babel进行jsx解析编译的是根据@babel/babel-preset-react-app解析成React.createElement进行包裹的,而v17以及之后的版本,官网早就说明,对jsx的转换用...到底是如何玩的,那么进入源码在babel解析后的v17产物中我们可以看得到 var _jsxRuntime = require("react/jsx-runtime");那么我们追本溯源可以找到在packages.../react/src/jsx/ReactJSX.js里面的jsxs是怎么来的// packages/react/src/jsx/ReactJSX.jsimport {REACT_FRAGMENT_TYPE...总结不管是类组件还是函数组件,最终我们写的jsx都被babel转化成了可识别的元素,其中我们也看了ReactElement,createElement,Component等内部实现,了解到了作为ReactElement

    50430

    babel如何解析jsx

    同作为MVVM框架,React相比于Vue来讲,上手更需要JavaScript功底深厚一些,本系列将阅读React相关源码,从jsx -> VDom -> RDOM等一些列的过程,将会在本系列中一一讲解工欲善其事...babel进行jsx解析编译的是根据@babel/babel-preset-react-app解析成React.createElement进行包裹的,而v17以及之后的版本,官网早就说明,对jsx的转换用...到底是如何玩的,那么进入源码在babel解析后的v17产物中我们可以看得到 var _jsxRuntime = require("react/jsx-runtime");那么我们追本溯源可以找到在packages.../react/src/jsx/ReactJSX.js里面的jsxs是怎么来的// packages/react/src/jsx/ReactJSX.jsimport {REACT_FRAGMENT_TYPE...总结不管是类组件还是函数组件,最终我们写的jsx都被babel转化成了可识别的元素,其中我们也看了ReactElement,createElement,Component等内部实现,了解到了作为ReactElement

    72310

    React 18不再依赖Concurrent Mode开启并发更新了

    比如,使用上述「不安全的」生命周期函数时会产生如下报错信息: StrictMode下使用不安全生命周期函数报错 渐进升级第二步 下一步,React团队让不同情况的React可以在同一个页面共存,借此可以让情况.../>)创建的应用遵循该模式,默认开启StrictMode,表现同情况4 3种模式可用特性对比 为了让不同模式的应用可以在同一个页面内工作,需要调整一些底层实现。...这些调整工作发生在v17,所以v17也被称作为「开启并发更新」做铺垫的「垫脚石」版本。 最新的渐进升级策略 时间前进到2021年6月8日,v18工作组成立。...在与社区进行大量沟通后,React团队意识到当前的「渐进升级」策略存在两方面问题。 原因一 首先,由于模式影响的是整个应用,所以无法在同一个应用中完成渐进升级。...此时,整个应用的「并发不兼容警告」都会上报,开发者还是需要修改整个应用。 从这个角度看,并没有起到「渐进升级」的目的。

    1.4K20

    babel如何解析jsx

    同作为MVVM框架,React相比于Vue来讲,上手更需要JavaScript功底深厚一些,本系列将阅读React相关源码,从jsx -> VDom -> RDOM等一些列的过程,将会在本系列中一一讲解工欲善其事...babel进行jsx解析编译的是根据@babel/babel-preset-react-app解析成React.createElement进行包裹的,而v17以及之后的版本,官网早就说明,对jsx的转换用...到底是如何玩的,那么进入源码在babel解析后的v17产物中我们可以看得到 var _jsxRuntime = require("react/jsx-runtime");那么我们追本溯源可以找到在packages.../react/src/jsx/ReactJSX.js里面的jsxs是怎么来的// packages/react/src/jsx/ReactJSX.jsimport {REACT_FRAGMENT_TYPE...总结不管是类组件还是函数组件,最终我们写的jsx都被babel转化成了可识别的元素,其中我们也看了ReactElement,createElement,Component等内部实现,了解到了作为ReactElement

    78420

    react源码分析:babel如何解析jsx_2023-02-06

    同作为MVVM框架,React相比于Vue来讲,上手更需要JavaScript功底深厚一些,本系列将阅读React相关源码,从jsx -> VDom -> RDOM等一些列的过程,将会在本系列中一一讲解工欲善其事...babel进行jsx解析编译的是根据@babel/babel-preset-react-app解析成React.createElement进行包裹的,而v17以及之后的版本,官网早就说明,对jsx的转换用...到底是如何玩的,那么进入源码在babel解析后的v17产物中我们可以看得到 var _jsxRuntime = require("react/jsx-runtime");那么我们追本溯源可以找到在packages.../react/src/jsx/ReactJSX.js里面的jsxs是怎么来的// packages/react/src/jsx/ReactJSX.jsimport {REACT_FRAGMENT_TYPE...总结不管是类组件还是函数组件,最终我们写的jsx都被babel转化成了可识别的元素,其中我们也看了ReactElement,createElement,Component等内部实现,了解到了作为ReactElement

    39830

    react源码分析:babel如何解析jsx

    同作为MVVM框架,React相比于Vue来讲,上手更需要JavaScript功底深厚一些,本系列将阅读React相关源码,从jsx -> VDom -> RDOM等一些列的过程,将会在本系列中一一讲解工欲善其事...babel进行jsx解析编译的是根据@babel/babel-preset-react-app解析成React.createElement进行包裹的,而v17以及之后的版本,官网早就说明,对jsx的转换用...到底是如何玩的,那么进入源码在babel解析后的v17产物中我们可以看得到 var _jsxRuntime = require("react/jsx-runtime");那么我们追本溯源可以找到在packages.../react/src/jsx/ReactJSX.js里面的jsxs是怎么来的// packages/react/src/jsx/ReactJSX.jsimport {REACT_FRAGMENT_TYPE...总结不管是类组件还是函数组件,最终我们写的jsx都被babel转化成了可识别的元素,其中我们也看了ReactElement,createElement,Component等内部实现,了解到了作为ReactElement

    40440

    react源码分析:babel如何解析jsx_2023-02-27

    同作为MVVM框架,React相比于Vue来讲,上手更需要JavaScript功底深厚一些,本系列将阅读React相关源码,从jsx -> VDom -> RDOM等一些列的过程,将会在本系列中一一讲解...图片 所以各位看到了,在v16及以前我们babel进行jsx解析编译的是根据@babel/babel-preset-react-app解析成React.createElement进行包裹的,而v17以及之后的版本...,官网早就说明,对jsx的转换用react/jsx-runtime,而不再依赖React.createElement了,看到这里我想各位对不同版本的babel解析jsx已经有了眉目了,早已经迫不及待想去看看...jsx-runtime和createElement到底是如何玩的,那么进入源码 在babel解析后的v17产物中我们可以看得到 var _jsxRuntime = require("react/jsx-runtime...总结 不管是类组件还是函数组件,最终我们写的jsx都被babel转化成了可识别的元素,其中我们也看了ReactElement,createElement,Component等内部实现,了解到了作为ReactElement

    43730

    react源码分析:babel如何解析jsx

    同作为MVVM框架,React相比于Vue来讲,上手更需要JavaScript功底深厚一些,本系列将阅读React相关源码,从jsx -> VDom -> RDOM等一些列的过程,将会在本系列中一一讲解工欲善其事...babel进行jsx解析编译的是根据@babel/babel-preset-react-app解析成React.createElement进行包裹的,而v17以及之后的版本,官网早就说明,对jsx的转换用...到底是如何玩的,那么进入源码在babel解析后的v17产物中我们可以看得到 var _jsxRuntime = require("react/jsx-runtime");那么我们追本溯源可以找到在packages.../react/src/jsx/ReactJSX.js里面的jsxs是怎么来的// packages/react/src/jsx/ReactJSX.jsimport {REACT_FRAGMENT_TYPE...总结不管是类组件还是函数组件,最终我们写的jsx都被babel转化成了可识别的元素,其中我们也看了ReactElement,createElement,Component等内部实现,了解到了作为ReactElement

    50520

    React18 带来了什么

    经历了v17的平缓过渡,React 3月29日正式发布了React v18版本。这个版本带来了一些十分重要的能力。但大家伙不必担心学不动,这个版本无破坏性更新,hooks 还在。以下是核心功能更新。...当然,如果我们继续使用旧的 Render API,React 会按v17的方式去工作。以下是所有特性的一览表:图片为了更好地理解 React 18,我强烈建议你阅读官方给出的以下两篇 blog。...事实上,在 v17 版本,React 就提出了一个实验性的模式:Concurrent Mode,它就是 Concurrent Render 的前身。...Fiber 使用了 while-loop 的方式,来替代更新 vDOM 的更新过程,使用 while 循环,允许有一个寻找更新节点的钩子,来决定需要更新的部分,这也就是我们所说的分片能力,我们不必再等整个...在新的版本中,如果你使用了新的 root API,以上的场景都会自动启动批量更新的能力。

    1K60

    「React进阶」一文吃透react事件原理

    我们讲的react版本是16.13.1 , v17之后react对于事件系统会有相关的改版,文章后半部分会提及。...造成一些不可控的情况 另一方面, React 想实现一个全浏览器的框架, 为了实现这种目标就需要提供全浏览器一致性的事件系统,以此抹平不同浏览器的差异。...接下来我想让大家记住一种类型的 fiber 对象,因为后面会用到,这对后续的理解很有帮助。...事件合成-事件插件 1 必要概念 我们先来看来几个常量关系,这对于我们吃透react事件原理很有帮助。在解析来的讲解中,我也会讲到这几个对象如何来的,具体有什么作用。...evnent_click.jpg 五 关于react v17版本的事件系统 React v17 整体改动不是很大,但是事件系统的改动却不小,首先上述的很多执行函数,在v17版本不复存在了。

    3.1K31

    升级React17,Toast组件不能用了

    再显示「Hey, Ka Song~」 然而,在React v17效果如下: ? 先点击PortalRenderer的button后,再点击ToastButton,不会看见toast的内容。...事实上,在一个大型项目中,如果从v16升级到v17, 在使用了如上所示的「在document挂载原生click事件」方式实现toast的同时, 再使用Portal在document.body挂载DOM都会触发该...为什么只有在挂载了Portal的情况下bug能复现? 为什么该bug只在v17复现? 该从哪条线索下手呢? v17有哪些变化? 相比第一、二条,第三条线索能更好控制影响范围。...看看v17的更新log,一条特性变化引起了卡尔摩斯的注意: ? 在v17之前,整个应用的事件会冒泡到同一个根节点(html DOM节点)。...回调不会异步执行,而是会在本轮DOM更新完成后同步执行。

    2.1K20

    React 从 v15 升级到 v16 后,为什么要重构底层架构

    只有当 Reconciler 完成工作后,工作流程才会进入 Renderer。...这些调整工作发生在 v17,所以v17 也被称作“为开启并发更新做铺垫”的“垫脚石”版本。 2021 年 6 月 8 日,v18 工作组成立。...在与社区进行大量沟通后,React 团队意识到当前的“渐进升级”策略存在两方面问题。首先,由于模式影响的是整个应用,因此无法在同一个应用中完成渐进升级。...此时,整个应用的“并发不兼容警告”都会上报,开发者需要修复整个应用中的不兼容代码。从这个角度看,“渐进升级”的目的并没有达到。...其次,React 团队发现:开发者从新架构中获益,主要是由于使用了并发特性,并发特性指“开启并发更新后才能使用的那些 React 为了解决 CPU 瓶颈、I/O 瓶颈而设计的特性”,比如: useDeferredValue

    87030
    领券