JSX 语法详解

简介: 【9月更文挑战第2天】本文详细介绍了React框架中核心组件JSX的基本概念与高级用法,包括基本语法、条件与列表渲染等。并通过具体示例讲解了如何避免常见的错误,如忘记闭合标签、未使用`key`属性及属性名大小写问题,帮助读者更好地理解和运用JSX,提升React应用程序的开发质量。

在现代前端开发中,React 框架因其高效和灵活的特点而备受青睐。作为 React 的核心组成部分之一,JSX(JavaScript XML)是一种语法扩展,它允许我们在 JavaScript 中书写类似 HTML 的标签。本文将从基础入手,逐步深入地介绍 JSX 的基本概念、常见问题及易错点,并通过具体的代码示例来帮助大家更好地理解和应用。
image.png

1. JSX 的基本概念

什么是 JSX?

JSX 是一种类似于 HTML 的语法扩展,它允许我们在 JavaScript 中书写类似 HTML 的标签。JSX 可以让代码更加直观和易于理解,特别是在处理复杂的 UI 结构时。

JSX 的基本语法

基本元素

function Greeting() {
    return <h1>Hello, world!</h1>;
}

属性

function Welcome(props) {
    return <h1>Hello, {props.name}!</h1>;
}

<Welcome name="Alice" />;

子元素

function Card() {
    return (
        <div>
            <h1>Title</h1>
            <p>Content</p>
        </div>
    );
}

表达式

function Square({ value }) {
    return <button>{value}</button>;
}

<Square value={42} />;

JSX 的编译过程

JSX 代码在编译时会被转换成普通的 JavaScript 代码。例如,上面的 <h1>Hello, world!</h1> 会被转换成 React.createElement('h1', null, 'Hello, world!')

2. JSX 的高级用法

条件渲染

三元运算符

function NumberDisplay({ value }) {
    return value > 0 ? <p>Positive</p> : <p>Negative or Zero</p>;
}

<NumberDisplay value={-5} />;
<NumberDisplay value={0} />;
<NumberDisplay value={5} />;

短路运算符

function UserGreeting({ isLoggedIn }) {
    return isLoggedIn ? <p>Welcome back!</p> : null;
}

<UserGreeting isLoggedIn={true} />;
<UserGreeting isLoggedIn={false} />;

列表渲染

使用 map 函数

function NumberList({ numbers }) {
    const listItems = numbers.map((number) => <li key={number.toString()}>{number}</li>);
    return <ul>{listItems}</ul>;
}

const numbers = [1, 2, 3, 4, 5];
<NumberList numbers={numbers} />;

使用 key 属性

function TodoList({ todos }) {
    const todoItems = todos.map((todo) => <li key={todo.id}>{todo.text}</li>);
    return <ul>{todoItems}</ul>;
}

const todos = [
    { id: 1, text: 'Learn React' },
    { id: 2, text: 'Build a web app' },
    { id: 3, text: 'Deploy the app' }
];

<TodoList todos={todos} />;

JSX 中的样式

内联样式

function Box({ color }) {
    const style = {
        backgroundColor: color,
        padding: '10px',
        margin: '10px',
        border: '1px solid black'
    };
    return <div style={style}>Box</div>;
}

<Box color="red" />;
<Box color="blue" />;

CSS 类名

function Button({ className }) {
    return <button className={className}>Button</button>;
}

<Button className="primary" />;
<Button className="secondary" />;

3. 常见问题与易错点

常见问题

  • 忘记使用闭合标签:在 JSX 中,所有标签都需要闭合。
  • 忘记使用 key 属性:在渲染列表时,忘记给每个元素加上唯一的 key 属性。
  • 属性名称大小写:在 JSX 中,属性名称区分大小写。

如何避免

  • 闭合标签:确保所有标签都正确闭合。
  • 使用 key 属性:在渲染列表时,始终给每个元素加上唯一的 key 属性。
  • 属性名称大小写:使用标准的 JSX 属性名称,如 className 而不是 class

示例代码

忘记闭合标签

// 错误示例
function ErrorCard() {
    return <div><p>Content</p>;
}

// 正确示例
function CorrectCard() {
    return <div><p>Content</p></div>;
}

忘记使用 key 属性

// 错误示例
function TodoList({ todos }) {
    const todoItems = todos.map((todo) => <li>{todo.text}</li>);
    return <ul>{todoItems}</ul>;
}

// 正确示例
function TodoList({ todos }) {
    const todoItems = todos.map((todo) => <li key={todo.id}>{todo.text}</li>);
    return <ul>{todoItems}</ul>;
}

属性名称大小写

// 错误示例
function Button({ class }) {
    return <button class={class}>Button</button>;
}

// 正确示例
function Button({ className }) {
    return <button className={className}>Button</button>;
}

4. 总结

通过本文的学习,相信你对 JSX 有了更清晰的认识。JSX 是 React 框架的核心组成部分之一,它允许我们在 JavaScript 中书写类似 HTML 的标签。理解并熟练运用 JSX,对于编写高质量的 React 应用程序至关重要。希望本文能为你今后的学习之路打下坚实的基础!

目录
相关文章
|
7月前
|
前端开发 JavaScript 开发者
React:JSX语法入门
React:JSX语法入门
99 0
|
7月前
|
前端开发 JavaScript
jsx的语法规则
jsx的语法规则
|
4月前
|
XML JavaScript 前端开发
React Jsx语法入门
【8月更文挑战第13天】React Jsx语法入门
47 4
|
4月前
|
XML 前端开发 JavaScript
React——JSX语法【三】
React——JSX语法【三】
35 0
|
7月前
|
前端开发 JavaScript 安全
React中的JSX:语法与原理深入解析
【4月更文挑战第25天】本文深入解析React中的JSX,一种JavaScript语法扩展,使代码更直观。JSX让开发者以HTML样式描述组件UI,但最终编译成JavaScript。通过Babel转换,JSX标签转为React.createElement()调用,创建虚拟DOM。JSX的优势在于直观性、类型安全、代码复用和工具支持,助力高效开发React组件,适应不断发展的Web应用需求。
|
JavaScript 前端开发
12Vue - 模板语法(插值-使用JavaScript表达式)
12Vue - 模板语法(插值-使用JavaScript表达式)
222 0
|
JavaScript 前端开发 C++
58Vue - Props(字面量语法 vs 动态语法)
58Vue - Props(字面量语法 vs 动态语法)
48 0
|
小程序
uniapp使用scss 嵌套语法
uniapp使用scss 嵌套语法
328 1
|
XML JavaScript 前端开发
react总结之jsx是什么,jsx语法规则
react总结之jsx是什么,jsx语法规则
|
7月前
|
XML 前端开发 JavaScript
【前端】深入了解React JSX语法及实例应用
【前端】深入了解React JSX语法及实例应用
80 0