JSX本质与核心原理总结

0 阅读2分钟

一、JSX的本质是什么 ?

很多人误解JSX是HTML,这是错误的JSX的本质是:

JSX是JavaScript的语法拓展(syntax extension)

管方定义:

JSX is a syntax extension for JavaScript.

它不是模板的语言,不是HTML,不是字符串。它是:

JavaScript + XML-likes syntax

二、JSX会被编译成什么?

<h1>Hello</h1>

会被编译成

React.createElement('h1'null'hello')

在现代构建工具(如Vite 或者 Webpack)中,会被Babel转换成JS。所以:

JSX只是一个语法糖(syntactic sugar).

三、JSX的底层结构

React.createElement本质结构

React.createElement(type, props, children)

例如:

<div className="box">Hello</div>

被编译为:图片

JSX 最终会被处理为 JS 对象

四、JSX不是HTML

JSX看起来像HTML,但它不是:区别:1️⃣ class → className

<div className="box"></div>

在 JavaScript 语言规范里,class是一个关键字(用来定义类,比如class App {})。如果在 JSX 里直接写:

<div class="box"></div>   ❎

Babel 在解析时会把class当成 JavaScript 的关键字,而不是 HTML 属性名,这样就会产生语法错误。

为了避免和 JS 的class关键字冲突,JSX 规定:

写 HTML 的class属性时,必须写成className

最终渲染到浏览器时,React 会自动把className转成标准的class属性

举例子:图片2️⃣ style 必须是对象图片不是字符串3️⃣ 事件是驼峰命名图片图片

五、JSX里面可以写什么

JSX中只能写JavaScript表达式(expression)

例如:

{count}{user.name}{isLogin ? "YES" : "NO"}

不可以写语句:图片因为if是statement, 不是expression.问为什么jsx里面不可以使用if ? 因为JSX只接受expression.

六、JSX的核心能力:动态UI

JSX的最大能力:

UI = JavaScript

例如:图片这是React的威力;

七、JSX与Component的关系

jsx可以使用:

  • HTML标签
  • React Component

例如:

<MyConponent />

本质是:图片

八、JSX与Render机制

每次state改变:

setState(...)

React会:

  • 重新执行组件函数
  • 生成新的JSX
  • 生成新的Virtual DOM
  • Diff
  • 更新真实DOM

JSX是这个流程的第一步

九、 JSX fragment (避免多余的dom)

JSX必须有一个根节点。错误:

return (  <h1></h1>  <p></p>)

正确:

return (  <>    <h1></h1>    <p></p>  </>)

Fragement的本质:

React.Fragment

十、JSX的核心规律总结

  • JSX是语法拓展,不是HTML
  • JSX会被编译成React.createElement
  • JSX本质是JS对象
  • JSX只能包含表达式
  • JSX中Component必须大写
  • JSX中必须有单一根节点

十一、 JSX的工程意义

JSX让:

  • 逻辑和UI在同一文件中
  • 组件高度封装
  • UI可组合

这符合前端架构思想。

十二、JSX的终极本质总结

JSX是一种声明式的UI描述语言,本质是React对象生成器,用于构建Virtual DOM