当前位置: 首页 > news >正文

React学习教程,从入门到精通, React 入门指南:React JSX 语法知识点详解及案例代码(8)

React JSX 语法知识点详解及案例代码

JSX(JavaScript XML)是 React 中的一种语法扩展,允许在 JavaScript 代码中编写类似 HTML 的结构。它使得组件的编写更加直观和简洁。


一、JSX 语法知识点

1. 基本语法

JSX 允许在 JavaScript 中直接编写类似 HTML 的标签。例如:

const element = <h1>Hello, world!</h1>;

2. 表达式插值

使用花括号 {} 可以在 JSX 中嵌入 JavaScript 表达式,如变量、函数调用等。

const name = "Alice";
const element = <h1>Hello, {name}!</h1>;

3. 属性(Props)

在 JSX 中,属性使用类似 HTML 的语法传递,但属性名使用驼峰命名法(camelCase)。

const element = <img src={user.avatarUrl} alt="User Avatar" />;

4. 嵌套元素

JSX 支持嵌套元素,必须有一个根元素包裹所有子元素。

const element = (<div><h1>Title</h1><p>Content goes here.</p></div>
);

5. 条件渲染

可以使用 JavaScript 的条件运算符、三元运算符或逻辑运算符在 JSX 中进行条件渲染。

const isLoggedIn = true;
const element = <div>{isLoggedIn ? <p>Welcome back!</p> : <p>Please sign in.</p>}</div>;

6. 列表渲染

使用 map 方法遍历数组并生成 JSX 元素列表。

const items = ["Apple", "Banana", "Cherry"];
const listItems = items.map((item, index) => <li key={index}>{item}</li>);
const element = <ul>{listItems}</ul>;

7. 事件处理

在 JSX 中,事件处理使用驼峰命名法,并传递函数作为事件处理器。

function handleClick() {alert("Clicked!");
}
const element = <button onClick={handleClick}>Click Me</button>;

8. 样式(Styles)

可以通过 style 属性传递一个对象来设置内联样式,或者使用 className 属性添加 CSS 类。

const style = { color: "blue", fontSize: "16px" };
const element = <p style={style}>Styled Text</p>;

或者:

const element = <p className="styled-paragraph">Styled Text</p>;

9. 注释

在 JSX 中使用 {} 包裹注释:

const element = (<div>{/* 这是一个注释 */}<p>Hello, world!</p></div>
);

10. 片段(Fragments)

使用 <React.Fragment> 或简写 <></> 来包裹多个元素而不增加额外的 DOM 节点。

const element = (<><p>First item</p><p>Second item</p></>
);

二、详细案例代码

以下是一个包含上述知识点的 React 组件示例,包含详细注释。

// 导入 React 库
import React from "react";// 定义一个函数组件 App
const App = () => {// 定义一些变量和数组const user = {name: "张三",age: 25,avatarUrl: "https://via.placeholder.com/150",};const items = ["苹果", "香蕉", "樱桃", "日期", "无花果"];// 定义事件处理函数const handleClick = () => {alert(`你好,${user.name}!`);};// 定义样式对象const buttonStyle = {backgroundColor: "#4CAF50",color: "white",padding: "10px 20px",border: "none",borderRadius: "5px",cursor: "pointer",};const paragraphStyle = {fontSize: "16px",color: "#333",marginBottom: "20px",};return (// 使用 React.Fragment 包裹多个元素<React.Fragment>{/* 条件渲染:根据用户年龄显示不同的消息 */}{user.age >= 18 ? (<p style={paragraphStyle}>欢迎,{user.name}!您已成年。</p>) : (<p style={paragraphStyle}>欢迎,{user.name}!您未成年。</p>)}{/* 列表渲染:显示水果列表 */}<ul>{items.map((item, index) => (<li key={index}>{item}</li>))}</ul>{/* 事件处理:按钮点击事件 */}<button style={buttonStyle} onClick={handleClick}>点击我</button>{/* 内联样式和嵌套元素 */}<div style={{ marginTop: "30px", padding: "10px", border: "1px solid #ccc" }}><h2>用户信息</h2><img src={user.avatarUrl} alt={`${user.name}的头像`} style={{ width: "100px", height: "100px", borderRadius: "50%" }} /><p>姓名: {user.name}</p><p>年龄: {user.age}</p></div></React.Fragment>);
};// 导出 App 组件
export default App;

代码详解

  1. 导入 React

    import React from "react";
    

    React 库是构建 React 组件的基础。

  2. 定义函数组件

    const App = () => {// ...
    };
    

    使用函数组件定义 App,这是 React 组件的一种形式。

  3. 定义数据和函数

    const user = { ... };
    const items = [ ... ];
    const handleClick = () => { ... };
    const buttonStyle = { ... };
    const paragraphStyle = { ... };
    
    • user 对象包含用户信息。
    • items 数组包含水果列表。
    • handleClick 函数处理按钮点击事件。
    • buttonStyleparagraphStyle 对象用于内联样式。
  4. 条件渲染

    {user.age >= 18 ? (<p style={paragraphStyle}>欢迎,{user.name}!您已成年。</p>
    ) : (<p style={paragraphStyle}>欢迎,{user.name}!您未成年。</p>
    )}
    

    根据 user.age 的值,渲染不同的消息。

  5. 列表渲染

    <ul>{items.map((item, index) => (<li key={index}>{item}</li>))}
    </ul>
    

    使用 map 方法遍历 items 数组,生成列表项。key 属性用于帮助 React 识别每个元素。

  6. 事件处理

    <button style={buttonStyle} onClick={handleClick}>点击我
    </button>
    

    按钮点击时触发 handleClick 函数,弹出欢迎消息。

  7. 内联样式

    <div style={{ marginTop: "30px", padding: "10px", border: "1px solid #ccc" }}>...
    </div>
    

    使用内联样式设置 div 的样式。

  8. 嵌套元素

    <div><h2>用户信息</h2><img src={user.avatarUrl} alt={`${user.name}的头像`} style={{ ... }} /><p>姓名: {user.name}</p><p>年龄: {user.age}</p>
    </div>
    

    嵌套多个元素展示用户信息。

  9. 片段(Fragments)

    <React.Fragment>...
    </React.Fragment>
    

    使用 React.Fragment 包裹多个元素,避免在 DOM 中生成额外的节点。也可以使用简写 <></>


三、运行效果

上述代码在 React 应用中运行后,将呈现以下内容:

  1. 欢迎消息:根据用户的年龄显示不同的欢迎信息。
  2. 水果列表:显示一个包含多个水果名称的无序列表。
  3. 按钮:点击按钮会弹出包含用户姓名的欢迎消息。
  4. 用户信息:展示用户的头像、姓名和年龄。

四、总结

JSX 是 React 中强大的语法扩展,提供了简洁且直观的方式来编写组件。通过掌握 JSX 的基本语法、表达式插值、属性传递、条件渲染、列表渲染、事件处理、样式设置以及片段的使用,可以有效地构建复杂的 React 应用。


文章转载自:

http://7vu9jtNc.mczjq.cn
http://wPLVuxYt.mczjq.cn
http://RbNcoHlF.mczjq.cn
http://X2zeRJvJ.mczjq.cn
http://uzhgyOTo.mczjq.cn
http://QpxGMdRH.mczjq.cn
http://dwfYNOsI.mczjq.cn
http://gPS2OW0Q.mczjq.cn
http://hBVMmFvB.mczjq.cn
http://21Goup4G.mczjq.cn
http://ZNo7l8la.mczjq.cn
http://RG1RjH11.mczjq.cn
http://ommabLI4.mczjq.cn
http://mZgRGtUS.mczjq.cn
http://n64NMMAF.mczjq.cn
http://8JvzbV25.mczjq.cn
http://dp0xaC4Z.mczjq.cn
http://pEYidWDR.mczjq.cn
http://uAaQhUV6.mczjq.cn
http://6G9PWoiG.mczjq.cn
http://qGYrBFZV.mczjq.cn
http://uF6BWf1G.mczjq.cn
http://DXU6Vgz1.mczjq.cn
http://UZrAEQrK.mczjq.cn
http://mEDjsS9N.mczjq.cn
http://JFoKMyJx.mczjq.cn
http://3qRQXl0B.mczjq.cn
http://hOiVwjnx.mczjq.cn
http://oDxSqeni.mczjq.cn
http://7ZfDjEdU.mczjq.cn
http://www.dtcms.com/a/362696.html

相关文章:

  • React 学习笔记4 Diffing/脚手架
  • go命令行工具:如何在现有的工程里加入使用cobra
  • 01 - 网页和web标准
  • AI文档产品与传统OCR软件的根本区别是什么?
  • Java集合源码解析之LinkedList
  • HTTPS如何保证数据传输过程中的安全性?
  • mapbox高阶,结合threejs(threebox)添加管道,实现管道流动效果
  • 红楼梦 HTML 分析 - 娇杏为何侥幸
  • ES6和CommonJS模块区别
  • Linux系统强大的命令行工具之fuser
  • 江协科技-1-1软件开发与2-1新建工程
  • C语言精选100道编程题(附有图解和源码)
  • 控制系统仿真之PID参数整定的Z-N法(弯曲切线法)(十)
  • K6 html压力测试报告中参数详解以及常见问题解析
  • 算法题打卡力扣第3题:无重复字符的最长子串(mid)
  • 在线拍卖|基于Springboot+vue的在线拍卖管理系统(源码+数据库+文档)
  • F5发布后量子API安全解决方案,以AI驱动全面防护应对量子计算威胁
  • 面阵 vs 线阵相机:怎么选不踩坑?选型公式直接套用
  • HTML第二课:块级元素
  • 【实时Linux实战系列】采用实时Linux构建无人机控制系统
  • Vue基础知识-Vue中v-cloak、v-text、v-html、v-once、v-pre指令详解
  • 【Doris入门】Doris数据表模型:聚合模型(Aggregate Key Model)详解
  • 数论常见公式定理大全
  • C++学习——继承
  • 无线通信网络是互联网边缘的重要组成,同时也是局域联网的主要方式
  • RT-Thread SMP相关问题分析
  • 01-html css
  • 【论文阅读】Jet-Nemotron: 高效语言模型与后神经网络架构搜索
  • 11.《简单的路由重分布基础知识探秘》
  • 解决完美主义的方法是,去追求不完美--辩证法