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

React 07

1 条件渲染支持三目运算符

【两个例子完全一样吗?】

1. 面向对象开发的 “实例” 认知

在传统面向对象开发中(比如使用 Vue 或原生 DOM 操作),我们创建的 UI 元素(如 <li>)是真实的对象实例,它们有自己的内部状态(比如输入框的内容、组件的私有数据),也是真实 DOM 节点的映射。

如果用面向对象的思维去看类似的 UI 逻辑,会觉得 “不同分支创建不同的 <li> 实例” 是有差异的 —— 因为实例的身份、状态可能隐含区别。

2. JSX 的本质:“描述性图纸”

JSX 元素不是真实的对象实例,它更像是一张 “设计图纸”:

  • 它没有内部状态,也不是真实的 DOM 节点,只是用来描述 UI 结构的简单对象(包含标签名、属性、子元素等信息)。
  • 当 React 渲染时,会根据这张 “图纸” 去创建或更新真实 DOM,但 JSX 本身只是 “描述”,而非 “实例”。

3. 为什么两个例子完全相同?

回到文中的两个例子(不管是用 if-else 还是三目运算符),它们最终生成的 JSX 描述是完全一致的—— 对于相同的逻辑(isPacked 为真时显示带对勾的内容,否则显示普通内容),最终产出的 “UI 图纸” 没有任何区别。

React 只关心这张 “图纸” 的结构,而不关心你是用哪种语法生成的它。因此,从 JSX 的本质和 React 的渲染逻辑来看,这两个例子在功能和最终效果上完全相同

延伸:“状态的保持和重置” 的关联

文中提到的 “状态的保持和重置”,核心是 React 对组件状态的管理逻辑。

因为 JSX 只是 “图纸”,React 会根据 “图纸” 的变化来决定是否保留或重置组件的内部状态 —— 这进一步印证了 JSX 本身不承载状态,只是描述 UI 的特性。

【jsx本质还是一个html骨架吗?】

不!

这种理解不够准确,JSX 本质上是JavaScript 的语法扩展,并非单纯的 HTML 骨架,我们可以从以下几个维度详细分析:

维度具体说明
语法本质JSX 是 JavaScript 代码的一种 “语法糖”,最终会被编译成 React.createElement() 这样的 JavaScript 函数调用,用来创建描述 UI 结构的对象(React 元素)。比如 <div>Hello</div> 会被编译为 React.createElement('div', null, 'Hello')
与 HTML 的区别虽然看起来像 HTML,但存在诸多差异。比如 class 要写成 className、for 要写成 htmlFor;可以在其中嵌入 JavaScript 表达式(用 {} 包裹),如 <div>{2 + 3}</div> 会渲染出 5;还支持条件渲染、列表渲染等逻辑,这些都是 HTML 不具备的。
功能定位它的作用是描述 UI 应该是什么样子,是一种 “声明式” 的 UI 描述方式。React 会根据这些描述来构建和更新真实的 DOM 树,它是连接 JavaScript 逻辑和最终 UI 呈现的桥梁,而非单纯的 HTML 结构。

2 条件渲染摘要

1. 用 JavaScript 控制 React 分支逻辑

React 是基于 JavaScript 构建的,所以可以直接在组件中使用 JavaScript 的逻辑语法(如 iffor、三元运算符等)来控制 JSX 的渲染分支,让 UI 能根据不同条件呈现不同内容。

2. 用if语句选择性返回 JSX 表达式

示例:

function MyComponent({ isShow }) {if (isShow) {return <div>显示的内容</div>;}return <div>隐藏时的内容</div>;
}

通过 if 语句判断条件,选择性地返回不同的 JSX 结构,实现分支渲染。

3. 把 JSX 赋值给变量后嵌入其他 JSX

示例:

function MyComponent({ isSpecial }) {let content;if (isSpecial) {content = <span>特殊内容</span>;} else {content = <span>普通内容</span>;}return <div>容器内容 {content}</div>;
}

将 JSX 先赋值给变量,再通过大括号 {} 嵌入到其他 JSX 中,让代码结构更清晰,便于复杂逻辑的管理。

4. 三元运算符{cond ? <A /> : <B />}

这是紧凑的条件渲染语法,意思是 “当 cond 为 true 时渲染 <A />,否则渲染 <B />”。示例:

function MyComponent({ isDone }) {return <div>{isDone ? <span>已完成</span> : <span>未完成</span>}</div>;
}

5. 逻辑与{cond && <A />}

表示 “当 cond 为 true 时渲染 <A />,否则不渲染任何内容”。常用于只需单分支渲染的场景。示例:

function MyComponent({ hasTip }) {return <div>{hasTip && <span>提示信息</span>}</div>;
}

当 hasTip 为 false 时,不会渲染 <span>,相当于 “隐藏” 该元素。

6. 语法选择的灵活性

虽然三元运算符、逻辑与这些快捷表达式在 React 开发中很常见,但如果你觉得if语句更易读、更符合自己的编码习惯,完全可以选择用if来实现分支逻辑,React 对这几种方式没有优劣限制,以代码可读性和维护性为准即可。

字符串需要用引号(单引号或双引号)来标识

emoji也是。

emoji 用引号包裹是因为在 JavaScript(包括 JSX 中的 JavaScript 表达式)里,字符串需要用引号(单引号或双引号)来标识

isPacked ? '✅' : '❌' 是一个 JavaScript 三元表达式,其中 '✅' 和 '❌' 是字符串字面量。JSX 是 JavaScript 的语法扩展,里面的大括号 {} 会执行 JavaScript 逻辑,所以这里必须遵循 JavaScript 对字符串的语法规则,用引号把 emoji 包裹起来,这样解释器才能正确识别它们是字符串类型,从而在渲染时输出对应的 emoji 符号。

http://www.dtcms.com/a/533418.html

相关文章:

  • 空间怎么上传网站seo的英文全称是什么
  • 架构师的生存法则
  • 兰州网站排名外包个人简历word文档模板
  • 大麦网网站内似网站开发广州营销型网站建设公司
  • AI 应用层革命(三)——智能文明的经济结构与社会秩序
  • 云南省建设厅网站处长网络培训的心得体会
  • 建一个网站的手机电脑版网站托管解决方案
  • STM32H743VIT6 KEIL RS485DMA发送和接受
  • 做跨境网站注意事项嘉兴公司做网站
  • 做企业网站排名优化要多少钱一个人做网站要多久
  • 营销型网站建设费用湘潭做网站 m磐石网络
  • 做黑网站wordpress结合cms
  • SAP发布OAUTH2.0接口
  • 空间激光通信
  • 如何在外管局网站做延期收汇app推广渠道商
  • Spring AOP核心:Advice类型与实战解析
  • 服装网站案例完整个人网站html
  • 北网站建设商城网站建
  • OpenWrt搭建私有源
  • RxJava在Android开发中的实战指南
  • 网站建设询价公告英文视频网站如何做外链
  • 东莞做网站需要避免这些因素网站开发的关键
  • [人工智能-大模型-89]:大模型底层依赖层/支撑层技术栈 - 多卡并行支持,NVLink、InfiniBand 高速互联网络
  • 嘉兴城乡建设局网站网站服务器如何管理
  • 四川省建设主管部门网站珠海市香洲区建设局网站
  • 【day11】技巧+链表
  • 临汾做网站长沙网站优化推广方案
  • 网站建设代理政策网站支持qq登录怎么做
  • 网站后缀ga蜂鸟影院高清免费观看
  • 童装网站建设目标分销系统合法吗