学习 React 之前,我们通常使用原生 JavaScript 操作 DOM:
ini
const div = document.createElement('div')
div.innerHTML = 'Hello React'
document.body.appendChild(div)
当页面越来越复杂时:
DOM操作越来越多
代码越来越难维护
开发效率越来越低
因此 React 出现了。
什么是 React?
React 是一个:
swift
用于构建用户界面(UI)的 JavaScript 框架(准确来说是库)
React 的核心目标:
提高前端开发效率
开发者只需要关注:
数据长什么样
页面就长什么样
而不需要频繁操作 DOM。
React 的特点
1. 声明式 UI
传统开发:
ini
const div = document.querySelector('.box')
div.innerHTML = 'Hello'
需要手动操作 DOM。
React:
javascript
function App() {
return <h1>Hello React</h1>
}
只需要描述:
页面应该长什么样
React 会自动完成更新。
2. 组件化开发
React 的核心思想:
scss
组件(Component)
可以理解为:
一个独立的小模块
例如:
css
首页
├── Header
├── Banner
├── ProductList
├── Footer
每个部分都可以写成一个组件。
组件化开发的优势:
代码复用
方便维护
职责清晰
开发效率高
开发大型项目时就像:
搭积木
一样。
3. 单页应用(SPA)
React 通常用于开发:
vbnet
Single Page Application
单页应用
特点:
css
整个网站只有一个HTML页面
页面切换不重新刷新
用户体验更好
例如:
css
知乎
掘金
B站后台
GitHub
都属于典型 SPA 应用。
4. 跨平台
React 不仅能开发 Web:
React → Web
React Native → Android
React Native → iOS
一套 React 思维:
多平台开发
创建 React 项目
create-react-app
React 官方曾经推荐:
lua
npx create-react-app my-app
特点:
配置完整
开箱即用
缺点:
启动速度慢
打包速度慢
Vite
目前主流方式:
sql
npm create vite@latest
特点:
启动快
热更新快
构建快
现在绝大部分 React 新项目:
Vite + React
JSX
React 最大的特点之一:
JSX
什么是 JSX?
JSX:
JavaScript + XML
通常表现为:
javascript
const element = (
<h1>Hello React</h1>
)
看起来像:
css
HTML
实际上:
css
不是HTML
是JS语法扩展
最终会被编译成:
scss
React.createElement(...)
项目入口文件
React 项目中:
css
main.jsx
通常是整个项目入口。
例如:
javascript
import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App.jsx'
ReactDOM.createRoot(
document.getElementById('root')
).render(
<App />
)
流程:
css
main.jsx
↓
App.jsx
↓
各个组件
JSX 中的表达式
JSX 支持:
{}
插入 JavaScript。
例如:
javascript
const name = 'Rose'
function App() {
return <h1>{name}</h1>
}
结果:
css
<h1>Rose</h1>
JSX 只能放表达式
可以:
arduino
{name}
{1 + 2}
{true}
{arr.length}
因为这些都是:
表达式
不能:
scss
{
if(true){}
}
因为:
arduino
if
for
switch
属于语句
JSX 不支持直接书写语句。
列表渲染
React 中最常见的需求:
根据数组生成多个元素
例如:
ini
const list = [
'Vue',
'React',
'Angular'
]
使用:
css
<ul>
{
list.map(item => (
<li>{item}</li>
))
}
</ul>
渲染结果:
css
<ul>
<li>Vue</li>
<li>React</li>
<li>Angular</li>
</ul>
key
列表渲染时必须添加:
xml
<ul>
{
list.map(item => (
<li key={item}>
{item}
</li>
))
}
</ul>
作用:
帮助React识别元素
提高更新效率
条件渲染
根据条件显示不同内容。
三元表达式
javascript
const isLogin = true
{
isLogin
? <h1>已登录</h1>
: <h1>未登录</h1>
}
&&
适用于:
满足条件才显示
css
{
isLogin &&
<h1>欢迎回来</h1>
}
等价于:
arduino
isLogin为true
才显示组件
样式处理
React 中常见三种方式。
1. className
因为:
arduino
class 是JS关键字
React 使用:
ini
<div className="box">
Hello
</div>
2. 行内样式
css
<div
style={{
color: 'red',
fontSize: '20px'
}}
>
Hello
</div>
特点:
外层 {}
内层 {}
3. CSS文件
css
.box{
color:red;
}
arduino
import './App.css'
ini
<div className="box">
Hello
</div>
这是项目开发中最常见的写法。
React 学习路线
学习完本篇内容后,下一步通常是:
React基础
↓
组件
↓
Props
↓
State
↓
事件绑定
↓
useState
↓
useEffect
↓
组件通信
↓
React Router
↓
Redux / Zustand
↓
项目实战
一张图记忆
React
│
├── JSX
│
├── 组件化
│
├── 声明式UI
│
├── SPA
│
└── 跨平台
JSX
│
├── 表达式
│
├── 列表渲染
│
├── 条件渲染
│
└── 样式处理
核心口诀
arduino
React:
提高开发效率
核心特点:
声明式UI
组件化
SPA
跨平台
JSX:
JS + XML
只能写表达式
列表渲染:
map + key
条件渲染:
? :
&&
样式:
className
style
css文件
入口文件:
main.jsx