React 介绍
React 起源于 Facebook 的内部项目。因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站。做出来以后,发现这套东西很好用,于是在 2013 年 5 月开源了。
React 是一个用于构建用户界面的 JavaScript 库。也是目前最流行的前端框架之一。

React 特点
React 矿建具备三个核心特点:
- 声明式 UI: UI 更清晰简洁
- 组件化:方便复用,开发更灵活
- 跨端开发:支持 SPA,SSR, Native App,VR 多平台开发
使用 React 脚手架创建项目
创建一个 React 项目方式一般有三种:
- 自己使用 webpack 或者 vite 从零搭建
- 使用官方脚手架快速创建项目
一般我们都是采用脚手架。
使用脚手架也有两种方式,一是先全局安装脚手架,再使用脚手架创建项目:
# 全局安装脚手架
npm i -g create-react-app
# 创建项目,project-name 项目名称
create-react-app <project-name>
二是使用 npx / pnpm 远程调用脚手架创建项目:
# 以 pnpm 为例
pnpm create react-app 01.basic
# 进入项目并启动:
cd 01.basic
pnpm start
启动成功,打开浏览器访问:

React 基本使用
第一个简单例子:使用 createElement 创建 React 元素
使用脚手架创建的项目,目录结构为:

修改项目入口文件 src/index.js 的内容:
// React的核心包,主要实现了虚拟dom,用于创建 React 元素
import React from 'react';
// React 开发前端页面的核心包,负责将 React 元素渲染到页面
import ReactDom from 'react-dom';
// createElement 方法用于创建一个 React 元素
// 参数1:标签名称
// 参数2:属性集合
// 参数3:标签子节点
const element = React.createElement('h1', { id: 'title' }, 'Hello, React');
// 将创建的元素渲染到html文件中的 root 节点上
ReactDom.render(element, document.getElementById('root'));
保存代码后,浏览器会自动刷新:

JSX 的使用
JSX 基本概念
JSX 是 JavaScript XML 的简写,表示了在 JavaScript 中书写 XML 格式的代码。
它是 React 的核心内容,可以让我们在 React 中创建元素更加简单,更加直观,提高开发效率。
需要注意的是,JSX 是 JavaScript 的语法扩展,是一种语法糖,而不是一门新的语言。
这是原来创建一个 React 元素的写法:
import React from 'react';
import ReactDom from 'react-dom';
const element = React.createElement('h1', { id: 'title' }, 'Hello, React');
ReactDom.render(element, document.getElementById('root'));
换成 JSX 就是:
import ReactDom from 'react-dom';
const element = <h1 id="title">Hello, React</h1>
ReactDom.render(element, document.getElementById('root'));
我们现在默认安装的 React 版本都是 18.x了。从 React17 以后,React 核心包就可以不必显式导入了。脚手架工具在使用 Babel 编译 jsx 文件的时候会自动导入。
可以看到,JSX 语法相比 createElement 方法,更加简洁、直观、高效。
JSX 的语法和一些注意点
JSX 语法,使用一对标签来表示一个组件。
为了和原生 HTML 标签区分,原生标签使用小写,React 组件使用大写。
有几个特殊属性,写法不同,class 要写成 className ,for 要写成htmlFor。
节点没有内容的可以使用单标签。
JSX 必需有根节点,如果没有根节点,可以使用 <></> 进行包裹。
如果 JSX 有换行,最好使用 () 包裹。
代码示例:
- 特殊属性
// 特殊属性要修改:class -> className;for -> htmlFor
<div className="box">
<label htmlFor="username"></label>
<input id="username" type="text" />
</div>
- 没有内容的节点,可以使用单标签
<span></span>
// 没内容可以写成单标签
<span />
- 必须有根节点。有两种方式。
// 1. 使用 React.Fragment 组件
import React from 'react';
import ReactDom from 'react-dom';
const element = (
<React.Fragment>
// .....
</React.Fragment>
);
ReactDom.render(element, document.getElementById('root'));
// 2. 使用 <></>,其实是 React.Fragment 的简写
import ReactDom from 'react-dom';
const element = (
<>
// ......
</>
);
ReactDom.render(element, document.getElementById('root'));
- 内容太多使用小括号包裹
const element = (
<>
// ......
</>
);
JSX 使用表达式
在JSX中可以写 JS 表达式,需要放在大括号{} 中。
常用的表达式形式包括:
- 展示数据
- 进行运算
- 三元运算
- 使用函数
- 使用 JSX
- 使用注释
import React from 'react';
import ReactDom from 'react-dom';
// 数据
const data = { name: 'kw', age: 18,};
// 函数
const up = () => { return data.name.toUpperCase();};
// jsx 表达式
const list = (
<ul>
<li>jack</li>
<li>tony</li>
</ul>
);
const element = (
<div>
{/* 1. 使用数据。 JSX 注释也要写在 {} 中 */}
<div>姓名:{ data.name }</div>
<div>年龄:{ data.age }</div>
{/* 2. 使用运算 */}
<div>明年几岁:{ data.age + 1 }</div>
{/* 3. 使用三元 */}
<div>是否成年:{ data.age > 18 ? '是' : '否' }</div>
{/* 4. 使用函数 */}
<div>姓名大写:{ up() }</div>
{/* 5. 使用JSX ,jsx也是表达式 */}
<div>朋友:{ list }</div>
</div>);
ReactDom.render(element, document.getElementById('root'));
小结
本文简单
小结
本文简单介绍了 React 是什么,以及使用官方脚手架工具,快速启动了一个 React 项目, 并演示了一个核心方法 createElement 方法的使用,它用来创建一个 React 元素,然后调用 render 方法,可以将其渲染到页面上。
同时, 可以发现使用 createElement 来写页面的话,非常麻烦,可读性差,所以实际开发中更推荐使用 JSX 来写真正的声明式 UI。
之后又简单介绍了 JSX 的一些常用写法和注意事项。下文会继续介绍 JSX 的其他用法。