16、鸿蒙学习——Visibility与(if...else)该如何选择
在鸿蒙中我们如果要控制一个组件的显示与隐藏可以设置组件的Visibility属性,也可使用(if...else)条件控制,具体我们该选择哪个?二者有什么区别呢?
1、Visibility
| 名称 | 描述 |
|---|---|
| Hidden | 隐藏,但参与布局进行占位。 |
| Visible | 显示。 |
| None | 隐藏,但不参与布局,不进行占位。 |
// xxx.ets
@Entry
@Component
struct VisibilityExample {build() {Column() {Column() {// 隐藏不参与占位Text('None').fontSize(9).width('90%').fontColor(0xCCCCCC)Row().visibility(Visibility.None).width('90%').height(80).backgroundColor(0xAFEEEE)// 隐藏参与占位Text('Hidden').fontSize(9).width('90%').fontColor(0xCCCCCC)Row().visibility(Visibility.Hidden).width('90%').height(80).backgroundColor(0xAFEEEE)// 正常显示,组件默认的显示模式Text('Visible').fontSize(9).width('90%').fontColor(0xCCCCCC)Row().visibility(Visibility.Visible).width('90%').height(80).backgroundColor(0xAFEEEE)}.width('90%').border({ width: 1 })}.width('100%').margin({ top: 5 })}
}
2、if...else
if语句的每个分支都包含一个构建函数。此类构建函数必须创建一个或多个子组件。在初始渲染时,if语句会执行构建函数,并将生成的子组件添加到其父组件中。
每当if或else if条件语句中使用的状态变量发生变化时,条件语句都会更新并重新评估新的条件值。如果条件值评估发生了变化,这意味着需要构建另一个条件分支。此时ArkUI框架将:
- 删除所有以前渲染的(早期分支的)组件。
- 执行新分支的构造函数,将生成的子组件添加到其父组件中。
二者区别
通过if进行条件渲染,其作用方式是满足条件时创建、未满足条件时销毁组件:- 只有在满足条件时,组件才会被创建。 - 条件不满足时,组件会被销毁,不会挂载在组件树上。
通过visibility进行显隐控制,根据参数值,控制当前组件显示或隐藏: - 初始时,无论是否显示,组件都会被创建。 - 隐藏时,组件不会被销毁,会继续挂载在组件树上,只是状态为不可见。
如何选择
1、关于if条件渲染或visibility显隐控制,实现组件的展示和隐藏状态的切换,两者的优势场景分别如下: 显隐控制的优势场景: - 如果组件动效占用较多、频繁地在展示和隐藏间切换时,建议使用显隐控制替代条件渲染,以避免组件的频繁创建与销毁,提升性能。详细使用场景,请参考《[优化布局性能](zh-cn/application-dev/performance/reduce-view-nesting-levels.md · OpenHarmony/docs - Gitee.com)》。
2、条件渲染的优势场景: - 在应用冷启动阶段,应用加载绘制首页时,如果组件初始不需要显示,建议使用条件渲染替代显隐控制,以减少渲染时间,加快启动速度。详细使用场景,请参考《[应用冷启动与加载绘制首页](zh-cn/application-dev/performance/reduce-redundant-operations-when-render-first-frame.md · OpenHarmony/docs - Gitee.com)》。
3、如果组件动效占用较少或无动效、不会较频繁地在展示和隐藏间切换,或者大部分时间不需要显示,建议使用条件渲染替代显隐控制,以减少界面复杂度、减少嵌套层次,提升性能。 - 如果被控制的组件所占内存庞大,开发者优先考虑内存时,建议使用条件渲染替代显隐控制,以即时销毁不需要显示的组件,节省内存。
4、针对反复切换条件渲染的控制分支的情况,且控制分支中的组件子树结构比较复杂,建议使用组件复用机制,提升应用性能。详细使用场景,请参考《[组件复用实践](zh-cn/application-dev/performance/component-recycle.md · OpenHarmony/docs - Gitee.com)》。
5、针对反复切换条件渲染的控制分支,但切换项仅涉及页面中少部分组件的情况,建议精准控制组件更新的范围,例如使用容器限制刷新范围,提升应用性能。详细使用场景,请参考《[提升应用响应速度](zh-cn/application-dev/performance/improve-application-response.md · OpenHarmony/docs - Gitee.com)》。
参考:华为开发者问答 | 华为开发者联盟
相关文章:
16、鸿蒙学习——Visibility与(if...else)该如何选择
在鸿蒙中我们如果要控制一个组件的显示与隐藏可以设置组件的Visibility属性,也可使用(if...else)条件控制,具体我们该选择哪个?二者有什么区别呢? 1、Visibility 名称描述Hidden隐藏,但参与布局…...
PH热榜 | 2024-12-05
1. Oopsie 标语:用AI和会话回放调试Flutter和React Native应用 介绍:Zipy推出的Oopsie是一款你唯一需要的AI赋能移动端调试工具,它能提供▶️会话回放、🤖错误监控、💡AI生成的概要分析,以及🔥…...
Qt Chart 模块化封装曲线图
一 版本说明 二 完成示例 此文章包含:曲线轴设置,曲线切换,单条曲线显示,坐标轴。。。 三 曲线图UI创建 在UI界面拖放一个QWidget,然后在 Widget里面放一个 graphicsView 四 代码介绍 1 头文件 #include <QString> #include <QTimer> #include <QMessa…...
【AI系统】MobileFormer
MobileFormer 在本文中,将介绍一种新的网络-MobileFormer,它实现了 Transformer 全局特征与 CNN 局部特征的融合,在较低的成本内,创造一个高效的网络。通过本节,让大家去了解如何将 CNN 与 Transformer 更好的结合起来…...
python数据分析之爬虫基础:解析
目录 1、xpath 1.1、xpath的安装以及lxml的安装 1.2、xpath的基本使用 1.3、xpath基本语法 2、JsonPath 2.1、jsonpath的安装 2.2、jsonpath的使用 2.3、jsonpath的基础语法 3、BeautifulSoup 3.1、bs4安装及创建 3.2、beautifulsoup的使用 3.3、beautifulsoup基本语…...
uniapp中导入uview或者uview plus
关于SCSS uview-plus依赖SCSS,您必须要安装此插件,否则无法正常运行。 如果您的项目是由HBuilder X创建的,相信已经安装scss插件,如果没有,请在HX菜单的 工具->插件安装中找到"scss/sass编译"插件进行安…...
【LeetCode】122.买卖股票的最佳时机II
文章目录 题目链接:题目描述:解题思路一(贪心算法):解体思路二(动态规划): 题目链接: 122.买卖股票的最佳时机II 题目描述: 解题思路一(贪心算法…...
openGauss开源数据库实战十九
文章目录 任务十九 openGauss DML 语句测试任务目标实施步骤一、准备工作二、INSERT语句三、DELETE语句四、UPDATE语句五、清理工作 任务十九 openGauss DML 语句测试 任务目标 掌握DML语句的用法,包括INSERT语句、DELETE语句和UPDATE语句。 实施步骤 一、准备工作 使用Li…...
恶补英语初级第18天,《询问他人的喜好(上)》
对话 Do you like coffee? Yes, I do. Do you want a cup? Yes, please. Do you want any sugar? Yes, please. Do you want any milk? No, thank you. I don’t like milk in my coffee, I like black coffee. Do you like biscuits? Yes, I do. Do you want one? Yes, …...
centos 报 ping: www.baidu.com: Name or service not known
[rootlocalhost ~]$ ping www.baidu.com ping: www.baidu.com: Name or service not known解决办法: 首先要求检查特定文件(/etc/resolv.conf)内是否正确配置了 DNS sudo vim /etc/resolv.conf没有正确配置可以添加如下代码: n…...
Python:使用随机森林分类器进行模型评估:ROC 曲线与 AUC 指标计算
前言 这段代码的目标是使用 随机森林分类器(Random Forest Classifier) 来进行二分类任务,并基于每个数据子集计算 ROC 曲线(Receiver Operating Characteristic Curve)以及 AUC(Area Under Curve…...
数据库表约束完全指南:提升数据完整性和准确性
数据库表约束完全指南:提升数据完整性和准确性 在数据库设计中,表约束是确保数据完整性和准确性的关键工具。本文将详细介绍各种类型的表约束及其使用方法,包括非空约束、唯一约束、主键约束、外键约束、默认值约束、检查约束以及自动递增约…...
【JavaEE】多线程(6)
一、用户态与内核态 【概念】 用户态是指用户程序运行时的状态,在这种状态下,CPU只能执行用户态下的指令,并且只能访问受限的内存空间 内核态是操作系统内核运行时的状态,内核是计算机系统的核心部分,CPU可以执行所有…...
BERT和RoBERTa;双向表示与单向的简单理解
目录 BERT和RoBERTa大型预训练语言模型 BERT的原理 RoBERTa的原理 举例说明 双向表示与单向的简单理解 除了预训练语言模型,还有什么模型 一、模型类型与结构 二、训练方式与数据 三、应用场景与功能 四、技术特点与优势 BERT和RoBERTa大型预训练语言模型 BERT(Bi…...
Pytorch使用手册-计算机视觉迁移学习教程(专题十三)
在本教程中,你将学习如何使用迁移学习训练一个卷积神经网络进行图像分类。更多关于迁移学习的内容可以参考 CS231n 课程笔记。 引用课程笔记中的内容: 实际上,很少有人从头开始训练一个完整的卷积网络(随机初始化),因为拥有足够大数据集的情况相对罕见。相反,通常会在非…...
Jackson - Java对象与JSON相互转换
在这篇文章中,我将向您展示如何使用Jackson-databind API来实现Java对象与JSON之间的绑定,以及如何将JSON数据转换为Java对象。 对于Java开发者来说,将JSON转换为Java对象及反向操作是一个常见的任务,因此我将通过示例演示如何完…...
怎麼解決路由器IP地址衝突?
路由器IP地址衝突通常發生在網路中有兩個設備嘗試使用相同的IP地址時。這種衝突會導致網路連接問題,因為每個設備需要一個唯一的IP地址才能正常通信。 1. 重啟設備 重啟路由器和設備:有時候簡單的重啟可以解決問題,設備重新獲取一個新的IP地…...
趣味数学 2.3.7 | 完全免费,无注册登录,简约纯净
趣味数学是一款完全免费的数学学习软件,支持安卓系统。它无需登录注册,界面简约纯净,分类详细,涵盖趣味数学、数学初练、应用计算、数字推理、图形推理、数字2048、题目练习和数学知识等多个分类。每个分类包含丰富的题目和关卡&a…...
Oracle ASM特性介绍和增删盘操作
1. 介绍 1.1. 在没有ASM之前ORACLE数据库靠什么去解决存储问题: 裸设备:裸设备就是没有被文件系统格式化的分区或者是直接挂载到操作系统上的磁盘。ORACLE可以直接将数据写入到裸设备中,读写能非常优异。像ORACLE的数据文件、控制文件、REDO日志在过去…...
深度优先搜索迷宫路径
深度优先搜索迷宫路径 问题描述 我们需要编写一个程序,通过深度优先搜索(DFS)找到从迷宫左上角到右下角的一条通路。 迷宫的表示: 迷宫由 0 和 1 构成的二维数组表示。0 表示可以走的路径,1 表示障碍。用户输入迷宫的…...
SpringBoot 2.6.2 + MyBatis-Plus 3.5.2 集成人大金仓Kingbase 8.6.0保姆级教程(含本地JAR安装避坑)
SpringBoot 2.6.2 MyBatis-Plus 3.5.2 集成人大金仓Kingbase 8.6.0实战指南 在国产化技术浪潮下,越来越多的企业开始采用国产数据库解决方案。作为国内领先的关系型数据库产品,人大金仓Kingbase以其高兼容性和稳定性受到广泛关注。本文将手把手带你完成…...
ADF4350频点锁定与电源滤波实战:为什么你的VCO输出有噪声?加个钽电容试试!
ADF4350频点锁定与电源滤波实战:为什么你的VCO输出有噪声?加个钽电容试试! 在射频电路设计中,ADF4350作为一款集成VCO的宽带频率合成器,因其出色的性能和灵活性广受工程师青睐。然而,许多开发者在实际应用中…...
A/B测试还在用t检验?DeepSeek团队淘汰传统方法的4个关键转折点(含贝叶斯动态决策引擎实测对比)
更多请点击: https://intelliparadigm.com 第一章:A/B测试范式迁移的必然性 传统A/B测试长期依赖静态流量分配、固定实验周期与人工决策闭环,在现代高并发、多场景、实时反馈的业务系统中正面临三重结构性失配:实验吞吐量低、决策…...
DocLayout-YOLO实战案例:从学术论文到财务报表的布局分析
DocLayout-YOLO实战案例:从学术论文到财务报表的布局分析 【免费下载链接】DocLayout-YOLO DocLayout-YOLO: Enhancing Document Layout Analysis through Diverse Synthetic Data and Global-to-Local Adaptive Perception 项目地址: https://gitcode.com/gh_mir…...
专业解密QQ音乐加密格式:QMCDecode让音乐文件重获自由播放权
专业解密QQ音乐加密格式:QMCDecode让音乐文件重获自由播放权 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,…...
JiYuTrainer:在极域电子教室中重获电脑控制权的终极方案
JiYuTrainer:在极域电子教室中重获电脑控制权的终极方案 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 你是否曾在机房上课时,被极域电子教室的全屏广播困…...
用Field II和MATLAB搞定超声波声场仿真:从理论推导到代码实战(附源码)
用Field II和MATLAB搞定超声波声场仿真:从理论推导到代码实战(附源码) 在医学超声成像和无损检测领域,精确模拟声场分布是优化成像质量的关键环节。Field II作为业界公认的超声波仿真工具,其强大的计算能力背后隐藏着大…...
整合Taotoken多模型能力为智能客服场景提供备选方案
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 整合Taotoken多模型能力为智能客服场景提供备选方案 在构建智能客服系统的过程中,产品经理和工程师常常面临一个核心挑…...
bili2text终极指南:一键将B站视频转换为高质量文字稿的免费工具
bili2text终极指南:一键将B站视频转换为高质量文字稿的免费工具 【免费下载链接】bili2text Bilibili视频转文字,一步到位,输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 你是否曾经为了整理B站视频中的精…...
重载大件物料输送选滚筒线还是倍速链?
在自动化输送行业摸爬滚打十几年,见过太多工厂因为选错输送线栽跟头——有厂家跟风选倍速链输送重型模具,运行不到一个月就出现链条磨损、滚筒卡死,停产检修花了几万块;也有工厂明明是大件重载输送,却选了轻型滚筒线&a…...
