React 基础篇(三)—— JSX

JSX

在前面 Hello World 的例子中,细心的你会发现,我们在 App.js 中对外暴露了一个函数,然而,在这个函数我们竟然返回了一个 h1 标签,那么,这样的表达到底是 HTML 还是 JS 呢?

答案两者都不是,这种语法称为 JSX

JSX 是一种用于描述 UIJavaScript 扩展语法,通常,在 React 应用中使用这种语法来描述一个组件的 UI 。与其他框架一样,React 也是一个面向组件开发的框架,通过组件来将页面进行拆分并实现组件复用。React 认为,一个组件应该具备 UI 描述和数据。于是就有了 JSX,作为 UI 描述和数据的桥梁。

更加直白的说,JSX 就是将 HTMLJS 进行了结合,可以在 HTML 中写 JS 代码,也可以在 JS 代码中写 HTML

JS 中使用 HTML 其实在前面 Hello World 的例子中都已经用过了,很简单,就是原样的使用。那么下面就来看看如何在 JS 中使用 HTML.

示例:

import React from 'react';
import './App.css';

//声明一个变量
const name = 'jonas'

function App() {
  return (
    //在HTML标签体中,通过{JS表达式}来插入JS语法
    <h1>Hello {name}</h1>
  );
}

export default App;

需要注意的是,{} 中的内容只能是 JS 表达式,不能是语句!

上面例子中,在标签体内使用了 JS 表达式,然而,在标签的属性中,也可以通过同样的方式进行插入。

const name = 'jonas'
const style = 'my_class'

function App() {
  return (
    <h1 className={style}>Hello {name}</h1>
  );
}

刷新发现标题有了一个类名,虽然没有定义这个类的样式,但是这个类名确实被加上了。

需要注意的是,在 JSX 语法中,因为 classJS 的一个关键字,所以使用了 className 来表示一个标签的类名。

JSX 对象

JSX 这种语法无法被浏览器引擎直接识别的,它需要被转译为浏览器可以识别的 JS

然而这个转译的工作是由 Babel 完成的,它会把 JSX 转译为一个 React.createElement() 的函数调用。

示例:

const element = (
  <h1 className="greeting">
    Hello, world!
  </h1>
);

转译:

const element = React.createElement(
  'h1',
  {className: 'greeting'},
  'Hello, world!'
);

然而,React.createElement() 实际上是创建了一个对象:

// 注意:这是简化过的结构
const element = {
  type: 'h1',
  props: {
    className: 'greeting',
    children: 'Hello, world!'
  }
};

这种对象被称为 React 元素,它们描述了希望在屏幕上看到的内容。React 通过读取这些对象,然后使用它们来构建 DOM 以及保持随时更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值