JSX原理

本文介绍了JSX的原理。由于用JavaScript对象表示DOM结构冗长且不清晰,React.js扩展了JavaScript语法,支持在代码里编写类似HTML标签结构。编译过程会将JSX结构转换成JavaScript对象,再通过ReactDOM.render()转换为DOM元素插入页面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSX原理

要明白JSX的原理,需要先明白如何用 JavaScript 对象来表现一个 DOM 元素的结构?
看下面的DOM结构

<div class='app' id='appRoot'>
  <h1 class='title'>欢迎进入React的世界</h1>
  <p>
    React.js 是一个帮助你构建页面 UI 的库
  </p>
</div>

上面这个 HTML 所有的信息我们都可以用 JavaScript 对象来表示:

{
  tag: 'div',
  attrs: { className: 'app', id: 'appRoot'},
  children: [
    {
      tag: 'h1',
      attrs: { className: 'title' },
      children: ['欢迎进入React的世界']
    },
    {
      tag: 'p',
      attrs: null,
      children: ['React.js 是一个构建页面 UI 的库']
    }
  ]
}

但是用 JavaScript 写起来太长了,结构看起来又不清晰,用 HTML 的方式写起来就方便很多了。

于是 React.js 就把 JavaScript 的语法扩展了一下,让 JavaScript 语言能够支持这种直接在 JavaScript 代码里面编写类似 HTML 标签结构的语法,这样写起来就方便很多了。编译的过程会把类似 HTML 的 JSX 结构转换成 JavaScript 的对象结构。

下面代码:

import React from 'react'
import ReactDOM from 'react-dom'

class App extends React.Component {
  render () {
    return (
      <div className='app' id='appRoot'>
        <h1 className='title'>欢迎进入React的世界</h1>
        <p>
          React.js 是一个构建页面 UI 的库
        </p>
      </div>
    )
  }
}

ReactDOM.render(
	<App />,
  document.getElementById('root')
)

编译之后将得到这样的代码:

import React from 'react'
import ReactDOM from 'react-dom'

class App extends React.Component {
  render () {
    return (
      React.createElement(
        "div",
        {
          className: 'app',
          id: 'appRoot'
        },
        React.createElement(
          "h1",
          { className: 'title' },
          "欢迎进入React的世界"
        ),
        React.createElement(
          "p",
          null,
          "React.js 是一个构建页面 UI 的库"
        )
      )
    )
  }
}

ReactDOM.render(
	React.createElement(App),
  document.getElementById('root')
)

React.createElement 会构建一个 JavaScript 对象来描述你 HTML 结构的信息,包括标签名、属性、还有子元素等, 语法为:

React.createElement(
  type,
  [props],
  [...children]
)

所谓的 JSX 其实就是 JavaScript 对象,所以使用 React 和 JSX 的时候一定要经过编译的过程:

JSX —使用react构造组件,bable进行编译—> JavaScript对象 — ReactDOM.render()—>DOM元素 —>插入页面

### 关于 JSX 的入门学习 JSX 是一种 JavaScript 的语法扩展,允许开发者在 JavaScript 文件中编写类似于 HTML 的代码结构[^1]。它主要用于 React 开发环境中,用于描述用户界面的结构和样式[^2]。 #### 什么是 JSXJSX 是 **JavaScript XML** 的缩写,代表了一种可以在 JavaScript 中嵌入类似 HTML 语法规则的方式[^3]。尽管它的外观与 HTML 非常相似,但它并不是标准的 JavaScript 语法,因此现代浏览器无法直接运行 JSX 代码。通常情况下,工具链(如 Babel)会被用来将 JSX 转换为纯 JavaScript 函数调用,从而让浏览器能够正常执行[^1]。 #### JSX 的基本特点 - 使用类 HTML 的语法定义 UI 组件,这使得熟悉 HTML 的开发者可以快速上手。 - 支持嵌套表达式,在 JSX 中可以通过 `{}` 嵌入任何有效的 JavaScript 表达式[^2]。 以下是使用 JSX 创建一个简单的 React 元素并将其渲染DOM 上的例子: ```jsx // 定义一个 JSX 元素 let heading = <h1 className="title">欢迎来到 JSX 世界</h1>; // 渲染到指定的 DOM 节点 import { createRoot } from 'react-dom/client'; const rootElement = document.getElementById('root'); if (rootElement) { const root = createRoot(rootElement); root.render(heading); } ``` 在这个例子中,`<h1>` 标签被定义为一个 JSX 元素,并通过 `createRoot` 方法渲染到了具有 ID 为 `'root'` 的 DOM 节点上。 #### JSX 原理 虽然 JSX 看起来像 HTML,但实际上它是经过编译器转换后的 JavaScript 对象。例如,上面的 `<h1>` 元素最终会被转化为如下形式的函数调用: ```javascript React.createElement( "h1", { className: "title" }, "欢迎来到 JSX 世界" ); ``` 这种转化过程由工具(如 Babel 或 Webpack 插件)自动完,开发者无需手动操作。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值