React 17 发布候选版本, 没有添加新功能

React v17.0 Release Candidate: No New Features

https://reactjs.org/blog/2020/08/10/react-v17-rc.html

React 17 版本不寻常,因为它没有添加任何面向开发人员的新功能。

取而代之的是,该发行版主要致力于简化 React 自身的升级。

React v16.0

https://reactjs.org/blog/2017/09/26/react-v16.0.html

  1. # To install React 17 RC with npm, run:
  2. $ npm i react@17.0.0-rc.0 react-dom@17.0.0-rc.0
  3. # To install React 17 RC with Yarn, run:
  4. $ yarn add react@17.0.0-rc.0 react-dom@17.0.0-rc.0

逐步升级策略

在过去的七年中,React 升级一直是“全有或全无”。

您可以使用旧版本,也可以将整个应用程序升级到新版本。没有中间的选择。

React 17支持逐步的 React升级。

这意味着当 React 18和下一个未来版本问世时,您现在将有更多选择。

https://reactjs.org/docs/legacy-context.html

1. 更改事件委托

在 React 17中,React将不再在文档级别附加事件处理程序。

取而代之的是,它将它们附加到渲染您的 React 树的根DOM容器中:

  1. const rootNode = document.getElementById('root');
  2. ReactDOM.render(<App />, rootNode);

微前端

in React 16 and earlier, React would do document.addEventListener() for most events.

React 17 will call rootNode.addEventListener() under the hood instead.

由于此更改,现在将由一个版本管理的React树嵌入到由其他React版本管理的树中更加安全。

这一变化还使将React嵌入到使用其他技术构建的应用程序中变得更加容易

捕获阶段

https://javascript.info/bubbling-and-capturing#capturing

  1. document.addEventListener('click', function() {
  2. // Now this event handler uses the capture phase,
  3. // so it receives *all* click events below!
  4. }, { capture: true });

其他重大变化

  1. 与浏览器对齐

https://codesandbox.io/s/strange-albattani-7tqr7?file=/src/App.js

  1. 没有事件池

React 17 从 React移除了“事件池”优化。

它不会提高现代浏览器的性能,甚至会使经验丰富的React用户感到困惑:

  1. function handleChange(e) {
  2. setData(data => ({
  3. ...data,
  4. // This crashes in React 16 and earlier:
  5. text: e.target.value
  6. }));
  7. }

这是因为React在旧浏览器中重用了不同事件之间的事件对象以提高性能,并将它们之间的所有事件字段都设置为null。

  1. Effect Cleanup Timing

  1. useEffect(() => {
  2. // This is the effect itself.
  3. return () => {
  4. // This is its cleanup.
  5. };
  6. });

潜在问题

  1. useEffect(() => {
  2. someRef.current.someSetupMethod();
  3. return () => {
  4. someRef.current.someCleanupMethod();
  5. };
  6. });

问题在于someRef.current是可变的,因此在运行清除功能时,它可能已设置为null。

  1. // solution
  2. useEffect(() => {
  3. const instance = someRef.current;
  4. instance.someSetupMethod();
  5. return () => {
  6. instance.someCleanupMethod();
  7. };
  8. });

https://github.com/facebook/react/tree/master/packages/eslint-plugin-react-hooks

  1. 返回未定义的一致错误

在React 16及更早版本中,返回undefined始终是一个错误:

  1. function Button() {
  2. return; // Error: Nothing was returned from render
  3. }
  1. function Button() {
  2. // We forgot to write return, so this component returns undefined.
  3. // React surfaces this as an error instead of ignoring it.
  4. <button />;
  5. }

在React 17中,forwardRef和 memo组件的行为与常规函数和类组件一致。从它们返回undefined是一个错误。

  1. let Button = forwardRef(() => {
  2. // We forgot to write return, so this component returns undefined.
  3. // React 17 surfaces this as an error instead of ignoring it.
  4. <button />;
  5. });
  6. let Button = memo(() => {
  7. // We forgot to write return, so this component returns undefined.
  8. // React 17 surfaces this as an error instead of ignoring it.
  9. <button />;
  10. });

对于您要故意不渲染任何内容的情况,请返回null。

  1. Native Component Stacks

在React 17中,使用不同的机制生成组件堆栈,该机制将它们与常规的本机JavaScript堆栈缝合在一起。这使您可以在生产环境中获得完全符号化的React组件堆栈跟踪。

  1. Removing Private Exports

https://github.com/necolas/react-native-web

在React 17中,这些私有导出已被删除。据我们所知,React Native for Web是唯一使用它们的项目,他们已经完成了向不依赖于私人出口的其他方法的迁移

refs

https://reactjs.org/blog/2020/08/10/react-v17-rc.html#changelog

Portals

https://reactjs.org/docs/portals.html



xgqfrms 2012-2020

www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!


React 17 发布候选版本, 没有添加新功能的更多相关文章

  1. phpcms如何给已有的模块添加新功能?

    phpcms如何给已有的模块添加新功能? 方法一:直接在模块里的控制器文件中添加功能. 不建议使用此方法,因为一旦phpcms升级,有可能会覆盖模块中的文件, 导致你添加的功能丢失. 方法二:新建一个 ...

  2. Sentinel 发布里程碑版本,添加集群流控功能

    自去年10月底发布GA版本后,Sentinel在近期发布了另一个里程碑版本v1.4(最新的版本号是v1.4.1),加入了开发者关注的集群流控功能. 集群流控简介 为什么要使用集群流控呢?假设我们希望给 ...

  3. PyCharm 2019.3发布,增加了哪些新功能呢?

    Python的IDE(Integrated Development Environment 集成开发环境)非常多,如:VS Code.Sublime.NotePad.Python自带编辑器IDLE.J ...

  4. 一个新人如何学习在大型系统中添加新功能和Debug

    文章背景: 今年七月份正式入职,公司主营ERP软件,楼主所在的组主要负责二次开发,使用的语言是Java. 什么叫二次开发呢?ERP软件的客户都是企业.而这些企业之间的情况都有所不同,一套标准版本的企业 ...

  5. Ecshop:后台添加新功能栏目以及管理权限设置

    一.添加菜单项 打开 /admin/includes/inc_menu.php文件(后台框架左边菜单),在最后添加一行如下: $modules['17_other_menu']['sns_list'] ...

  6. Git -- 新增分支添加新功能

    软件开发中,总有无穷无尽的新的功能要不断添加进来. 添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合 ...

  7. Spring总结 4.AOP之为对象添加新功能

    Spring除了提供增强原有功能的方法外,还提供了为一个对象引入新功能的方法.如下: package cn.powerfully.service; public interface IService ...

  8. Ecshop :后台添加新功能 菜单及 管理权限 配置

    需求:在<商品管理>下增加一项[商品推广管理]功能 一. 添加菜单项 打开 /admin/includes/inc_menu.php 文件(后台框架左边菜单),在最后添加一行如下: $mo ...

  9. ios app 实现热更新(无需发新版本实现app添加新功能)

    目前能够实现热更新的方法,总结起来有以下三种 1. 使用FaceBook 的开源框架 reactive native,使用js写原生的iOS应用 ios app可以在运行时从服务器拉取最新的js文件到 ...

随机推荐

  1. Go Code Review Comments

    Go Code Review Comments https://golang.org/wiki/CodeReviewComments

  2. Uber三代API 生命周期管理平台实现 Uber

    Uber三代API 生命周期管理平台实现 - InfoQ https://www.infoq.cn/article/H8Ml6L7vJGQz0efpWvyJ Uber 三代 API 生命周期管理平台实 ...

  3. MFA

    什么是 MFA?_启用和解绑MFA_账号常见问题_账号管理-阿里云 https://help.aliyun.com/knowledge_detail/37215.html

  4. IO多路复用与epoll机制浅析

    epoll是Linux中用于IO多路复用的机制,在nginx和redis等软件中都有应用,redis的性能好的原因之一也就是使用了epoll进行IO多路复用,同时epoll也是各大公司面试的热点问题. ...

  5. Integer的十进制转二,八,十六进制

    1,toBinaryString(int i) 将i以二进制形式输出出来 2,toOctalString(int i)将i以八进制形式输出出来 3,toHexString(int i)将i以十六进制形 ...

  6. JS小整理

    禁止右键和复制 $(document).ready( function() { document.body.oncontextmenu = document.body.ondragstart = do ...

  7. MySql命令,吐血整理的Mysql,实话,真的吐血

    MySql命令,吐血整理的Mysql,实话,真的吐血 1.基本操作 2.数据库操作 3.表的操作 4.数据操作 5.字符集编码 6.数据类型(列类型) 7.列属性(列约束) 8.建表规范 9.SELE ...

  8. 肝了一个半月的 Java 项目快速开发脚手架:Chewing

    前言 闲来无事,整一个 Java 项目快速开发脚手架. 正文 一.简介 Chewing 是一个简单的 Java 项目快速开发脚手架.既适合需要开发小型项目的小伙伴使用,也适合刚入门的新手用来学习一些常 ...

  9. 十四自定义构建购物计算组件&表单组件

    目录: 1.前言 2.组件介绍 3.js业务逻辑层 4.视图层 5.css属性设置 6.效果呈现 1.前言: 在第九篇文章购物车做好后,还忘记了一个至关重要的计算组件.在鸿蒙的组件中并没有提供这样一个 ...

  10. Java并发包源码学习系列:基于CAS非阻塞并发队列ConcurrentLinkedQueue源码解析

    目录 非阻塞并发队列ConcurrentLinkedQueue概述 结构组成 基本不变式 head的不变式与可变式 tail的不变式与可变式 offer操作 源码解析 图解offer操作 JDK1.6 ...