JSX 入门:React 开发者的必备技能指南

JSX 是 React 的一种语法扩展,用于描述 UI 组件的外观。在 React 中,JSX 可以与 JavaScript 一起使用,帮助您在应用程序中创建动态和可重用的组件。以下是 JSX 的语法、使用技巧和注意事项,以及一些示例代码。

  1. JSX 基础语法

JSX 允许在 JavaScript 代码中编写类似于 HTML 的代码。在 JSX 中,您可以创建标签、属性和子元素,以构建组件的结构。以下是一个简单的 JSX 示例:

const greeting = <h1>Hello, World!</h1>;
  1. JSX 表达式

JSX 允许在大括号 {} 内嵌入 JavaScript 表达式。这使您可以动态生成元素并在其中使用变量和函数。

const name = 'John';
const greeting = <h1>Hello, {name}!</h1>;
  1. 条件渲染

在 JSX 中,可以使用 JavaScript 运算符(如三元运算符或逻辑与运算符)根据条件渲染元素。

const isLoggedIn = true;
const message = (<div>{isLoggedIn ? <p>Welcome back!</p> : <p>Please log in.</p>}</div>
);
  1. 列表和键

在 JSX 中渲染列表时,需要为每个元素分配一个唯一的 key 属性,以帮助 React 识别哪些元素已更改、添加或删除。

const numbers = [1, 2, 3, 4, 5];
const listItems = numbers.map((number) =><li key={number.toString()}>{number}</li>
);
  1. 事件处理

在 JSX 中,可以使用 JavaScript 函数来处理用户交互事件。为了在事件处理程序中引用函数,需要使用驼峰式命名法(例如 onClick 而不是 onclick)。

function handleClick() {console.log('Button clicked!');
}const button = <button onClick={handleClick}>Click me</button>;
  1. 组件

组件是 React 中的核心概念。在 JSX 中,可以将组件视为自定义标签,并在其他组件中嵌套使用这些标签。

function Welcome(props) {return <h1>Hello, {props.name}</h1>;
}const element = <Welcome name="John" />;
  1. 注意事项
  • JSX 标签必须闭合。
  • JSX 标签名称必须以大写字母开头,以区分内置的 HTML 标签和自定义组件。
  • 在 JSX 中,需要使用 className 代替 class 属性,以避免与 JavaScript 的保留字冲突。
  • 在 JSX 中,需要使用 htmlFor 代替 for 属性,以避免与 JavaScript 的保留字冲突。
  1. 多个元素

在 JSX 中,组件只能返回一个根元素。如果需要返回多个元素,可以将其包装在一个父元素中,例如 <div><React.Fragment>

function App() {return (<div><h1>Hello, World!</h1><p>Welcome to React.</p></div>);
}// 或者使用 React.Fragment
function App() {return (<React.Fragment><h1>Hello, World!</h1><p>Welcome to React.</p></React.Fragment>);
}// 或者使用简写语法
function App() {return (<><h1>Hello, World!</h1><p>Welcome to React.</p></>);
}
  1. 内联样式

在 JSX 中,可以使用内联样式来设置元素的样式。需要将样式属性设置为一个 JavaScript 对象,其中键为驼峰式的 CSS 属性名称,值为字符串值。

const divStyle = {color: 'white',backgroundColor: 'black',padding: '10px',fontSize: '24px'
};const styledDiv = <div style={divStyle}>Styled Div</div>;
  1. 展开运算符

在 JSX 中,可以使用展开运算符(...)将一个对象的属性传递给组件。

const props = {name: 'John',age: 30
};function User(props) {return (<div><p>Name: {props.name}</p><p>Age: {props.age}</p></div>);
}const user = <User {...props} />;
  1. 默认属性

在 React 中,可以为组件的属性设置默认值。这在组件接收到未定义的属性时非常有用。

function Welcome(props) {return <h1>Hello, {props.name}</h1>;
}Welcome.defaultProps = {name: 'Guest'
};const element = <Welcome />; // 渲染 "Hello, Guest"
  1. 属性类型检查

使用 PropTypes 库可以为组件的属性进行类型检查,以确保正确地使用组件。

import PropTypes from 'prop-types';function Welcome(props) {return <h1>Hello, {props.name}</h1>;
}Welcome.propTypes = {name: PropTypes.string.isRequired
};
  1. HTML 属性命名

在 JSX 中,需要使用驼峰式命名法来命名属性。这意味着所有属性名称都应该以小写字母开头,后跟一个或多个大写字母,例如 onClicktabIndexariaLabel

const button = (<button onClick={handleClick} tabIndex="0" aria-label="Click me">Click me</button>
);

请注意,当在 JSX 中使用 HTML 属性时,需要使用驼峰式命名法,即使 HTML 属性本身是小写的。例如,使用 className 代替 class,使用 htmlFor 代替 for

  1. 自定义属性

在 JSX 中,您可以为组件添加自定义属性,以传递额外的信息。自定义属性应以 data-*aria-* 为前缀,以避免与内置属性冲突。

function MyComponent(props) {return (<div data-my-prop={props.myProp}>{props.children}</div>);
}const element = (<MyComponent myProp="custom-value"><h1>Hello, World!</h1></MyComponent>
);

总之,掌握 JSX 的语法和使用技巧对于 React 开发至关重要。通过学习这些概念并实践示例代码,您可以更好地利用 JSX 来创建动态和可重用的组件,并提高应用程序的整体性能和可维护性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/798579.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

非关系型数据库——三万字Redis数据库详解

目录 前言 一、Redis概述 1.主要特点 2.Redis优缺点 3.Redis为什么这么快 4.Redis那么快&#xff0c;为什么不用它做主数据库&#xff0c;只用它做缓存 5.线程模型 5.1单线程架构 5.2多线程IO处理&#xff08;Redis 6及以上&#xff09; 5.3线程模型的优化 6.作用 …

回归预测 | Matlab实现WOA-GPR鲸鱼算法优化高斯过程回归多变量回归预测

回归预测 | Matlab实现WOA-GPR鲸鱼算法优化高斯过程回归多变量回归预测 目录 回归预测 | Matlab实现WOA-GPR鲸鱼算法优化高斯过程回归多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现WOA-GPR鲸鱼算法优化高斯过程回归多变量回归预测 1.Matlab实现…

系统设计取舍问题

在需求设计过程中&#xff0c;常常面临着取舍问题。由于资源和时间的限制&#xff0c;不可能满足所有的需求&#xff0c;因此需要进行取舍。以下是一些常见的需求设计取舍问题和应对方法&#xff1a; 优先级&#xff1a;对于不同的需求&#xff0c;可以根据其重要性和紧急程度来…

蓝桥杯考前复习二

1.快速幂 public static long qmi(long a, long b, long p) {long r 1;while (b ! 0) {if ((b & 1) 1) {r (r * a) % p;}b >> 1;a a * a % p;}return r;} 2.Java日期类 日期问题暂更 3.日期问题模板 考前更新 4.状态机DP 1.松散子序列 - 蓝桥云课 (lanqia…

LOOP AT内表循环事件块 程序实例

REPORT zdemo_0006. *声明一个结构 DATA: BEGIN OF gs_alv, va1 TYPE char2, va2 TYPE char2, va3 TYPE char2, va4 TYPE char2, END OF gs_alv. *声明内表 DATA: gt_alv LIKE TABLE OF gs_alv. *赋值宏 DEFINE append_va. gs_alv-va1…

吹爆!遥感高光谱分类(Python)

目录 一、数据集下载 二、安装包 三、数据处理 四、模型训练 五、模型推理 六、踩坑记录 一、数据集下载 Hyperspectral Remote Sensing Scenes - Grupo de Inteligencia Computacional (GIC) (ehu.eus) Installing SPy — Spectral Python 0.21 documentation 二、安装…

算法打卡day36|动态规划篇04| 01背包理论基础、416. 分割等和子集

目录 01背包理论基础 01背包问题描述 01背包解法 二维数组 一维数组 算法题 Leetcode 416. 分割等和子集 个人思路 解法 动态规划 01背包理论基础 不同的背包种类&#xff0c;虽然有那么多中南背包&#xff0c;但其中01背包和完全背包是重中之重&#xff1b; 01背包问…

Python + Appium 自动化操作微信入门看这一篇就够了

Appium 是一个开源的自动化测试工具&#xff0c;支持 Android、iOS 平台上的原生应用&#xff0c;支持 Java、Python、PHP 等多种语言。 Appium 封装了 Selenium&#xff0c;能够为用户提供所有常见的 JSON 格式的 Selenium 命令以及额外的移动设备相关的控制命令&#xff0c;…

LABVIEW--正弦+高斯噪声信号及滤波

前面板信号 后面板 LABVIEW源程序链接&#xff1a;https://pan.baidu.com/s/11B-75i4fHZwWQyjxn9yCyQ?pwd7tfj 提取码&#xff1a;7tfj

中文地址分词器源码阅读(jiedi)

文章目录 structure.p文件pd.read_excelenumerate思维导图核心源码讲解jiedi.pytrain.py 总结 structure 点击左边的Structure按钮就如Structure界面。从Structure我们可以看出当前代码文件中有多少个全局变量、函数、类以及类中有多少个成员变量和成员函数。 其中V图标表示全…

AI普及时代,【AI书童】助你提升自我竞争力

AI运营官招募令&#xff01;&#xff01;&#xff01; 【AI书童】运营官 未来智慧人工智能 2024-03-26 12:00 浙江 微信公众号&#xff1a;未来智慧人工智能 助力个人和企业在人工智能时代持续成功 随着ChatGPT、GPT-4和Sora等创新技术的推出&#xff0c;人工智能在多模态领…

《梦幻西游》迎来史上最大翻车,老玩家们为何纷纷揭竿而起?

因一次调整&#xff0c;21岁的《梦幻西游》迎来了自己有史以来最大的一波节奏。 玩家在微博上炮轰官方&#xff0c;称&#xff1a;“游戏借着打击工作室牟利的称号&#xff0c;砍副本活动产出&#xff0c;然后自己口袋无限卖”&#xff0c;要求改善游戏现状。 从3月29日起&am…

小黑逆向爬虫探索与成长之路:小黑独立破解毛毛租数据加密与解密

前言 有道和招标网的加密入口定位在前面两期做了详细的介绍&#xff0c;本小结将通过简单的关键词搜索定位到加密与解密入口 数据接口寻找与请求 根据响应数据长度&#xff0c;确定数据接口&#xff0c;发现传入的参数需要加密&#xff0c;响应的结果需要解密&#xff0c;后…

nodejs应用程序不同部署环境下的差异配置方案

一、背景 nodejs应用程序&#xff0c;不同于java语言使用分布式配置&#xff0c;当部署于不同的环境里&#xff0c;因为环境的差异&#xff0c;配置项的值也不尽相同。 最常见的差异就是数据库的连接信息&#xff0c;而代码是一份&#xff0c;不能把生产环境的信息暴露在非生产…

Vue Router 5个导航守卫(详解)

文章目录 导航守卫全局前置守卫全局解析守卫全局后置钩子路由独享的守卫组件内的守卫 完整的导航解析流程 导航守卫 vue-router提供的导航守卫主要用来通过跳转或取消的方式守卫导航 注意&#xff1a;参数或查询的改变并不会触发进入/离开的导航守卫&#xff0c;你可以通过观察…

html+css+js编程入门----使用TitanIDE制作可切换主题的简单网页

在学习编程的时候&#xff0c;最重要的就是直接动手尝试&#xff0c;从实际挑战中逐渐作出调整。这个网站制作教程将根据以下几个步骤&#xff0c;手把手带你制作一个简易的网站&#xff0c;让你了解 HTML、CSS 和 JS 之间的关系与基本操作&#xff1a; 当我们从建筑的角度来理…

Unity学习笔记 - 第一个Hello World都算不上的项目

一、Unity安装 这里不细说安装了&#xff0c;首先需要Visual Studio&#xff0c;然后要安装Unity Hub&#xff0c;Unity Hub就像一个管理平台&#xff0c;安装完它之后&#xff0c;可以在它的界面上选择安装各个版本的编辑器。 开始您的创意项目并下载 Unity Hub | Unity通过 …

lv17 CGI移植 5-1

简介 CGIC是一个支持CGI开发的开放源码的标准C库&#xff0c;可以免费使用&#xff0c;只需要在开发的站点和程序文档中有个公开声明即可&#xff0c;表明程序使用了CGIC库&#xff0c;用户也可以购买商业授权而无需公开声明。 CGIC能够提供以下功能&#xff1a; 分析数据&a…

【第十二篇】使用BurpSuite实现CSRF(实战案例)

CSRF存在前提:简单的身份验证只能保证请求是发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的 业务场景:新增、删除、收藏、编辑、保存使用Burp发现CSRF漏洞的过程如下。 1、如图,存在修改邮箱的功能点如下: 2、修改邮箱的流量包,此时邮箱已被修改: 思路:是…

【云开发笔记NO.26】CHDFS

由于这是腾讯云学习笔记&#xff0c;所以很多技术&#xff0c;都是腾讯云的。 由腾讯云的课程&#xff0c;加上查询资料&#xff0c;整理而来。 CHDFS&#xff0c;即腾讯云分布式文件系统&#xff08;Tencent Hybrid Distributed File System&#xff09;&#xff0c;是腾讯云…