React17以后全新的JSX转换

首先,在浏览器中无法直接使用jsx,需要借助babel将jsx代码转化为javaScript。

新的转换有何不同?

当你使用 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,哪怕我们在代码中没有用到React?
就是因为我们在使用jsx时,需要转换,但是这个转换是调用了React.createElement这个方法。

为了解决使用jsx必须要在react的环境中使用,新的 JSX 转换不会将 JSX 转换为 React.createElement,而是自动从 React 的 package 中引入jsx函数并调用。

假设你的源代码如下:

function App() {
  return <h1>Hello World</h1>;
}

下方是新 JSX 被转换编译后的结果:

// 由编译器引入(禁止自己引入!)
import {jsx as _jsx} from 'react/jsx-runtime';

function App() {
  return _jsx('h1', { children: 'Hello world' });
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容