Appearance
JSX 语法基础
JSX 是 React 的核心模板语法,它允许我们在 JavaScript 中编写类似 HTML 的代码。本章节将介绍 JSX 的基本语法规则和使用方法。
5.1 什么是JSX?
JSX(JavaScript XML)是一种 JavaScript 的扩展语法,它允许我们在 JavaScript 代码中直接编写 HTML 结构。
语法本质
- JSX 不是 HTML,而是一种 JavaScript 语法扩展
- JSX 会被 Babel 等工具编译成普通的 JavaScript 代码
- JSX 允许我们在模板中嵌入 JavaScript 表达式
与HTML的区别
- JSX 中使用
className而不是class - JSX 中使用
htmlFor而不是for - JSX 中可以嵌入 JavaScript 表达式
- JSX 中的属性名使用驼峰命名法
5.2 JSX 基础语法规则
标签必须闭合
- 所有标签都必须闭合,包括自闭合标签
- 正确:
<div></div>、<img /> - 错误:
<div>、<img>
嵌套规范
- 标签必须正确嵌套
- 正确:
<div><p>内容</p></div> - 错误:
<div><p>内容</div></p>
className 替代 class
- 在 JSX 中,使用
className而不是class - 原因:
class是 JavaScript 的关键字
jsx
// 正确
<div className="container">内容</div>
// 错误
<div class="container">内容</div>内联样式写法
- 在 JSX 中,内联样式使用对象形式
- 样式属性名使用驼峰命名法
jsx
// 正确
<div style={{ color: 'red', fontSize: '16px' }}>内容</div>
// 错误
<div style="color: red; font-size: 16px;">内容</div>注释写法
- 在 JSX 中,注释使用
{/* 注释内容 */}格式
jsx
<div>
{/* 这是一个注释 */}
<p>内容</p>
</div>5.3 JSX 中嵌入表达式
在 JSX 中,我们可以使用 {} 来嵌入 JavaScript 表达式。
基本用法
jsx
const name = 'React';
return (
<div>
<h1>Hello, {name}!</h1>
<p>当前时间:{new Date().toLocaleString()}</p>
</div>
);表达式类型
- 变量
- 函数调用
- 算术表达式
- 逻辑表达式
- 三元表达式
jsx
const count = 10;
const isLoggedIn = true;
return (
<div>
<p>计数:{count}</p>
<p>计数的平方:{count * count}</p>
<p>是否登录:{isLoggedIn ? '已登录' : '未登录'}</p>
<p>随机数:{Math.random()}</p>
</div>
);5.4 JSX 条件渲染
if-else
jsx
function Greeting({ isLoggedIn }) {
if (isLoggedIn) {
return <h1>欢迎回来!</h1>;
} else {
return <h1>请登录</h1>;
}
}三元表达式
jsx
function Greeting({ isLoggedIn }) {
return (
<div>
{isLoggedIn ? <h1>欢迎回来!</h1> : <h1>请登录</h1>}
</div>
);
}逻辑与 &&
jsx
function Notification({ message }) {
return (
<div>
{message && <p>{message}</p>}
</div>
);
}5.5 JSX 列表渲染
map 方法
在 React 中,我们使用 map 方法来渲染列表。
jsx
const fruits = ['苹果', '香蕉', '橙子'];
return (
<ul>
{fruits.map((fruit, index) => (
<li key={index}>{fruit}</li>
))}
</ul>
);key 值的作用与注意事项
- key 是 React 用来识别列表项的唯一标识
- 重要性:帮助 React 高效地更新 DOM
- 注意事项:
- 不要使用索引作为 key(当列表项可能被重新排序时)
- 应该使用唯一且稳定的标识符作为 key
- 每个列表项的 key 必须是唯一的
jsx
// 推荐
const users = [
{ id: 1, name: '张三' },
{ id: 2, name: '李四' },
{ id: 3, name: '王五' }
];
return (
<ul>
{users.map(user => (
<li key={user.id}>{user.name}</li>
))}
</ul>
);5.6 JSX 禁止使用的语法陷阱
1. 不能在 JSX 中使用 if 语句
jsx
// 错误
return (
<div>
if (isLoggedIn) {
<h1>欢迎回来!</h1>
}
</div>
);
// 正确
return (
<div>
{isLoggedIn && <h1>欢迎回来!</h1>}
</div>
);2. 不能在 JSX 中使用 for 循环
jsx
// 错误
return (
<ul>
for (let i = 0; i < 5; i++) {
<li>{i}</li>
}
</ul>
);
// 正确
return (
<ul>
{Array.from({ length: 5 }).map((_, i) => (
<li key={i}>{i}</li>
))}
</ul>
);3. 不能直接在 JSX 中使用对象
jsx
// 错误
const user = { name: '张三', age: 20 };
return (
<div>
{user}
</div>
);
// 正确
return (
<div>
<p>姓名:{user.name}</p>
<p>年龄:{user.age}</p>
</div>
);4. 不能在 JSX 中使用 this 指向组件实例(函数组件)
jsx
// 错误(函数组件)
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>计数:{this.state.count}</p>
<button onClick={this.increment}>增加</button>
</div>
);
}
// 正确(函数组件)
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>计数:{count}</p>
<button onClick={() => setCount(count + 1)}>增加</button>
</div>
);
}实战练习
练习1:基本 JSX 结构
jsx
function App() {
return (
<div className="app">
<header className="header">
<h1>React JSX 练习</h1>
</header>
<main className="main">
<p>这是一个基本的 JSX 结构示例</p>
</main>
<footer className="footer">
<p>© 2026 React 教程</p>
</footer>
</div>
);
}练习2:条件渲染和列表渲染
jsx
function App() {
const isLoggedIn = true;
const fruits = ['苹果', '香蕉', '橙子'];
return (
<div className="app">
{isLoggedIn ? (
<div>
<h2>欢迎回来!</h2>
<p>你喜欢的水果:</p>
<ul>
{fruits.map((fruit, index) => (
<li key={index}>{fruit}</li>
))}
</ul>
</div>
) : (
<h2>请登录查看内容</h2>
)}
</div>
);
}练习3:内联样式和表达式
jsx
function App() {
const name = 'React';
const age = 10;
const style = {
color: 'blue',
fontSize: '18px',
backgroundColor: 'lightgray',
padding: '10px',
borderRadius: '5px'
};
return (
<div className="app">
<div style={style}>
<h1>Hello, {name}!</h1>
<p>React 已经 {age} 岁了</p>
<p>当前时间:{new Date().toLocaleString()}</p>
<p>随机数:{Math.random().toFixed(2)}</p>
</div>
</div>
);
}通过本章节的学习,你已经掌握了 JSX 的基本语法规则和使用方法。JSX 是 React 开发的核心,掌握好 JSX 对于学习 React 至关重要。
