介绍全新的 JSX 转换
虽然 React 17 并未包含新特性,但它将提供一个全新版本的 JSX 转换。看看怎么用吧?
先看看 React 16 的项目。react 和 react-dom 的版本都是16的。
"react": "^16.8.6","react-dom": "^16.8.6",
import React from 'react'; // 必须引入 React
import logo from './logo.svg';
import './App.css';function App() {return (<div className="App"><header className="App-header"><img src={logo} className="App-logo" alt="logo" /><p>Edit <code>src/App.js</code> and save to reload.</p><aclassName="App-link"href="https://reactjs.org"target="_blank"rel="noopener noreferrer">Learn React</a></header></div>);
}export default App;
必须引入 React,如果没有引入就会报错。
再看看 React 17 的项目。react 和 react-dom 的版本都是17的。
"react": "^17.0.1","react-dom": "^17.0.1",
// import React from 'react'; 不需要引入 React
import logo from './logo.svg';
import './App.css';function App() {return (<div className="App"><header className="App-header"><img src={logo} className="App-logo" alt="logo" /><p>Edit <code>src/App.js</code> and save to reload.</p><aclassName="App-link"href="https://reactjs.org"target="_blank"rel="noopener noreferrer">Learn React</a></header></div>);
}export default App;
你可以单独使用 JSX 而无需引入 React。
在浏览器中无法直接使用 JSX,所以大多数 React 开发者需依靠 Babel 或 TypeScript 来将 JSX 代码转换为 JavaScript。许多包含预配置的工具,例如 Create React App 或 Next.js,在其内部也引入了 JSX 转换。
React 17 提供了一个全新的,重构过的 JSX 转换的版本。升级至全新的转换完全是可选的,但升级它会为你带来一些好处:
1、使用全新的转换,你可以单独使用 JSX 而无需引入 React。
2、根据你的配置,JSX 的编译输出可能会略微改善 bundle 的大小。
3、它将减少你需要学习 React 概念的数量,以备未来之需。
新的转换有何不同?
当你使用 JSX 时,编译器会将其转换为浏览器可以理解的 React 函数调用。旧的 JSX 转换会把 JSX 转换为 React.createElement(...) 调用。
例如,假设源代码如下:
import React from 'react';function App() {return <h1>Hello World</h1>;
}
旧的 JSX 转换会将上述代码变成普通的 JavaScript 代码:
import React from 'react';function App() {return React.createElement('h1', null, 'Hello world');
}
然而,这并不完美:
如果使用 JSX,则需在 React 的环境下,因为 JSX 将被编译成 React.createElement。有一些 React.createElement 无法做到的性能优化和简化。
为了解决这些问题,React 17 在 React 的 package 中引入了两个新入口,这些入口只会被 Babel 和 TypeScript 等编译器使用。新的 JSX 转换不会将 JSX 转换为 React.createElement,而是自动从 React 的 package 中引入新的入口函数并调用。
假设你的源代码如下:
function App() {return <h1>Hello World</h1>;
}
下方是新 JSX 被转换编译后的结果:
// 由编译器引入(禁止自己引入!)
import {jsx as _jsx} from 'react/jsx-runtime';function App() {return _jsx('h1', { children: 'Hello world' });
}
注意,此时源代码无需引入 React 即可使用 JSX 了!
注意
react/jsx-runtime 和 react/jsx-dev-runtime 中的函数只能由编译器转换使用。如果你需要在代码中手动创建元素,你可以继续使用 React.createElement。它将继续工作,不会消失。
了解更多:https://zh-hans.reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html
介绍全新的 JSX 转换相关推荐
- 1.socket编程:socket编程,网络字节序,函数介绍,IP地址转换函数,sockaddr数据结构,网络套接字函数,socket相关函数,TCP server和client
1 Socket编程 socket这个词可以表示很多概念: 在TCP/IP协议中,"IP地址+TCP或UDP端口号"唯一标识网络通讯中的一个进程,"IP 地址+端 ...
- React jsx转换成原生JavaScript的一个例子
jsx代码: var React = require('react'); var ReactDOM = require('react-dom'); var MyButtonController = r ...
- 视频剪辑工作者的福音,视频格式转换工具4Videosoft Video Converter Ultimate的介绍使用,可以转换所有的视频格式
使用平台:Windows10,当然macOS也有相关的版本,我这里就不做介绍了 app:4Videosoft Video Converter Ultimate 文末附下载文件路径,全部测试安全 文章目 ...
- cifar数据集介绍及到图像转换的实现
CIFAR是一个用于普通物体识别的数据集.CIFAR数据集分为两种:CIFAR-10和CIFAR-100.The CIFAR-10 and CIFAR-100 are labeled subsets ...
- Quoted-printable 编码认识、介绍、编码解码转换
我们在做接收邮件时,有些邮件的Content-Transfer-Encoding类型为quoted-printable Quoted-printable 可译为"可打印字符引用编码" ...
- 外媒介绍全新表情密码 用emoji解锁安全吗?
如果你的手机开机密码能根据心情而变化会怎样,用(emoji笑哭表情)做密码是不是很有意思?虽然现在智能手机指纹识别越来越普及,但是密码键盘开锁仍是广大人民群众的首选.这意味着,我们除了要费心记住各种A ...
- 二、八、十、十六进制介绍及进制转换
进制:是计算机中数据的一种表示方法.N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F表示. 10进制:用0~9的数表示,逢10进1. 16进制:由0~9,A~F组成,与10进制的对应关系是 ...
- 虚拟网络编辑器三种模式工作原理详细介绍(桥接-网络地址转换-主机模式)
1.桥接模式(Bridged) 使用该模式的虚拟操作系统是局域网中的一个独立主机,具有独立访问网络中其他主机的功能.它的配置信息由VMnet0虚拟网络提供,不支持DHCP服务.用户需要按照一定的规则 ...
- lol1月24服务器维护,LOL1月24日更新内容介绍 全新9.2版本上线
今日凌晨4点,<英雄联盟>将正式开启全区停机维护,而这次维护的目的就是开启全新的9.2版本.这次更新的时间约为8小时,服务器将在中午12点重新开启. 这次的9.2版本更新是英雄联盟的一个比 ...
最新文章
- 【Qt】使用sqlite3数据库时,主键自增和获取自增后的主键的
- Lambda表达式的语法格式
- md5可以解密吗_Python训练营作业1:加密解密
- 音视频技术开发周刊(第120期)
- 火遍全网的Hutool,如何使用Builder模式构建线程池
- Microsoft Visual Studio 2008从试用版转为正式版
- Updating Homebrew... ...长时间卡住的问题
- 避免jQuery名字冲突--noConflict()方法
- 拓端tecdat|R语言Meta分析效应量
- 将c语言编译成verilog,是否可以将System Verilog函数编译为C或C?
- mysql hash分区 子分区_mysql分区管理 - hash分区
- 长ping命令返回结果输出为文本
- 使用Arduino+声音模块+LCD显示屏制作分贝仪
- 苹果手机怎么连接不了无线网络连接服务器,苹果手机连接wifi显示无互联网连接怎么办?...
- WebSocket多人聊天室
- 交换机的原理及其配置(一)
- 安装VC 6.0,出现 DOSX.EX must be in your AUTOEXEC.NT的信息
- access数据库连接sqlserver实现远程连接
- 红外传感器型号和参数_红外传感器参数
- AjaxPro的应用