房地产网站建设平台/网络营销策划案怎么写

房地产网站建设平台,网络营销策划案怎么写,网络设计培训学校,买一个网站需要多少钱基础语法概述 ArkTS的基本组成 装饰器:用于装饰类、结构、方法以及变量,并赋予其特殊含义。如上图都是装饰器,Component表示自定义组件,Entry表示表示自定义组件的入口组件,State表示组件中的状态变量,当状…

基础语法概述

ArkTS的基本组成

装饰器:用于装饰类、结构、方法以及变量,并赋予其特殊含义。如上图都是装饰器,@Component表示自定义组件,@Entry表示表示自定义组件的入口组件,@State表示组件中的状态变量,当状态变量发生变化就会触发UI刷新。

自定义组件:可以复用的UI单元,可组合其他组件,如上述被@Component装饰的struct Index

系统组件:ArkUI框架中默认内置的基础和容器组件,可直接被调用,比如Button、Text、Row等

事件方法:组件可以通过链式调用设置多个事件的响应逻辑,例如Button后面加Onclick() 

声明式UI描述

Text

Text('小说简说简介小说简介小说简介小说简介小说简介小说简介小说简介小说简介小说简介小说简介小说简介小说简介').width('100%').lineHeight(25)//文本溢出省略号.textOverflow({overflow:TextOverflow.Ellipsis})//文本溢出必须配合maxLines才有效果.maxLines(3)

Image

// 加载网络图片Image('https://cn-assets.gitee.com/assets/Codeblitz-8824e38875a106e16e29ff57ec977b08.png').height(50)// 加载本地图片Image($r('app.media.app_icon')).height(50)

配置事件

Button('Click me').onClick(() => {this.myText = 'ArkUI';})

 使用组件的成员函数配置组件的事件方法,需要bind this。

@State counter:number = 0
Button('add counter'+this.counter).onClick(this.myClickHandler.bind(this))
myClickHandler(): void {this.counter += 2;}

注意:在 ArkTS 中,不推荐使用成员函数配合 bind(this) 去配置组件的事件方法

1.性能开销:每次渲染都会重新绑定:当使用bind(this)时,每次组件重新渲染,都会创建一个新的函数实例。这是因为bind方法会返回一个新的函数,该函数内部绑定了特定的this值。如果组件频繁重新渲染,会不断创建新的函数实例,增加内存开销,影响性能。

2.代码可读性和维护性:使用 bind(this) 会使代码变得复杂,尤其是在处理多个事件或嵌套组件时,会增加代码的理解难度。开发者需要时刻关注 this 的指向,容易出现混淆

使用声明的箭头函数,可以直接调用,不需要bind this

Button('add counter'+this.counter).onClick(this.fn)
fn = () => {this.counter += 1}

创建自定义组件

在 ArkUI中,UI显示的内容均为组件,由框架直接提供的组件称为系统组件,由开发者定义的称为自定义组件。在进行UI界面开发时,通常不是把简单的系统组件进行组合使用,可是要考虑代码的复用性、业务逻辑和UI分离,后续版本演进等因素。因此,将UI和部分业务逻辑封装成自定义组件是不可或缺的能力。

自定义组件的基本用法

@Component
struct HelloComponent {@State message: string = 'Hello, World!';  build() {// HelloComponent自定义组件组合系统组件Row和TextRow() {Text(this.message).onClick(() => {// 状态变量message的改变驱动UI刷新,UI从'Hello, World!'刷新为'Hello, ArkUI!'this.message = 'Hello, ArkUI!';})}}
}

注意:如果在另外的文件中引用该自定义组件,需要使用export关键字导出,并在使用的页面import该自定义组件。

HelloComponent可以在其他自定义组件中的build()函数中多次创建,实现自定义组件的重用。

@Entry
@Component
struct ParentComponent {  build() {Column() {Text('ArkUI message')HelloComponent({ message: 'Hello World!' });  Divider()HelloComponent({ message: '你好,世界!' });}}
}

自定义组件的基本结构

struct

自定义组件基于struct实现,struct + 自定义组件名 + {...}的组合构成自定义组件,不能有继承关系。对于struct的实例化,可以省略new。但是要注意,自定义组件名、类名、函数名不能和系统组件名相同。

@Component

@Component装饰器只能装饰在struct关键字声明的数据结构。struct被@Component装饰后才能具备组件化能力,需要实现build方法描述。UI一个struct只能被一个@Component装饰。

在 ArkTS 里,@Component 是用于声明一个组件的装饰器,它可以接受一个可选的布尔类型参数,这个参数是 isStateless,其主要用途在于明确该组件是有状态组件还是无状态组件

参数含义 isStateless 为布尔类型,具体含义如下:

  • true:当传入 true 时,表明该组件是无状态组件。无状态组件不包含自身的状态(如 @State、@Link 等装饰的变量),其 UI 完全由传入的属性决定,只要输入的属性不变,组件的 UI 就不会发生变化。无状态组件相对简单,渲染性能通常更高。
  • false:当传入 false 或者不传入该参数时,默认该组件是有状态组件。有状态组件可以包含自身的状态,这些状态会随着用户操作或其他事件发生改变,从而触发组件的重新渲染以更新 UI。

 代码示例

无状态代码示例:

// 定义一个无状态组件,将 isStateless 参数设置为 true
@Component({ isStateless: true })
struct StatelessComponent {// 定义一个属性,用于接收外部传入的值msg: string;build() {// 在组件的构建函数中,使用传入的属性来构建 UIText(this.msg).fontSize(20)}
}// 在另一个组件中使用无状态组件
@Entry
@Component
struct ParentComponent {build() {Column() {// 创建 StatelessComponent 实例,并传入属性值StatelessComponent({ msg: 'This is a stateless component.' })}.width('100%')}
}

在上述代码中,StatelessComponent 是一个无状态组件,它没有自己的状态,UI 完全由外部传入的 msg 属性决定。

有状态代码示例:

// 定义一个有状态组件,不传入 isStateless 参数,默认是有状态的
@Component
struct StatefulComponent {// 使用 @State 装饰器定义一个有状态的变量@State count: number = 0;build() {Column({ space: 20 }) {// 显示当前的计数Text(`Count: ${this.count}`).fontSize(20)// 创建一个按钮,点击时增加计数Button('Increment').onClick(() => {this.count++;})}.width('100%')}
}@Entry
@Component
struct MainComponent {build() {Column() {// 使用有状态组件StatefulComponent()}.width('100%')}
}

在这个例子中,StatefulComponent 是一个有状态组件,它包含一个 @State 装饰的 count 变量,当用户点击按钮时,count 的值会改变,从而触发组件的重新渲染。

通过传入 isStateless 参数,开发者可以根据组件的特性和需求,灵活选择使用有状态组件或无状态组件,以达到更好的性能和可维护性。

build()函数

 build()函数用于定义自定义组件的声明式UI描述,自定义组件必须定义build()函数

@Component
struct MyComponent {build() {}
}

@Entry

@Entry装饰的自定义组件将作为UI页面的入口。在单个UI页面中,最多可以使用@Entry装饰一个自定义组件。@Entry可以接受一个可选的
LocalStorage的参数。

LocalStorage 是一种在浏览器(类似概念在 HarmonyOS 等系统中也有应用)中用于存储数据的机制,它允许开发者在客户端本地存储键值对数据,并且这些数据在浏览器会话期间(甚至在浏览器关闭后再次打开时)都会保留,除非手动清除。在 ArkTS 的上下文中,LocalStorage 提供了一种持久化存储应用程序状态或数据的方式,以便在页面重新加载或应用重启后仍能恢复之前的状态。

@Entry
@Component
struct MyComponent {
}

 @Reusable

@Resuable装饰器的主要作用是让组件可以被复用,避免重复创建相同的组件实例,从而提升性能。

应用场景

1. 列表渲染场景

在开发列表类界面时,通常会有大量相同类型的列表项。使用 @Reusable 装饰器可以复用这些列表项组件,减少内存开销和渲染时间。

// 定义可复用的列表项组件
@Reusable('ListItem')
@Component
struct ListItem {@Link private item: string;build() {Row({ space: 5 }) {Text(this.item).fontSize(18).margin({ left: 10 })}.width('100%').padding(10).border({ width: 1, color: Color.Grey })}
}// 使用可复用组件的列表页面
@Component
struct ListPage {private listData: string[] = ['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5'];build() {Column({ space: 10 }) {ForEach(this.listData, (item: string) => {// 复用 ListItem 组件ListItem({ item: $item })}, (item: string) => item)}.width('100%')}
}

2. 弹窗组件复用

在应用中,可能会多次使用相同样式和功能的弹窗组件,如确认弹窗、提示弹窗等。使用 @Reusable 装饰器可以提高弹窗组件的复用性。

// 定义可复用的确认弹窗组件
@Reusable('ConfirmDialog')
@Component
struct ConfirmDialog {@Link private visible: boolean;private message: string;private onConfirm: () => void;build() {if (this.visible) {Dialog({onCancel: () => {this.visible = false;}}) {Column({ space: 20 }) {Text(this.message).fontSize(18)Button('确认').onClick(() => {this.visible = false;this.onConfirm();})}.width('100%').padding(20)}}}
}// 使用确认弹窗组件的页面
@Component
struct MainPage {@State private showConfirmDialog: boolean = false;private confirmAction() {console.log('确认操作执行');}build() {Column({ space: 20 }) {Button('显示确认弹窗').onClick(() => {this.showConfirmDialog = true;})// 复用确认弹窗组件ConfirmDialog({visible: $showConfirmDialog,message: '确认要执行此操作吗?',onConfirm: this.confirmAction})}.width('100%').padding(20)}
}

成员函数/变量

自定义组件除了必须要实现build()函数外,还可以实现其他成员函数,成员函数具有以下约束:

  • 自定义组件的成员函数为私有的,且不建议声明成静态函数。

自定义组件可以包含成员变量,成员变量具有以下约束:

  • 自定义组件的成员变量为私有的,且不建议声明成静态变量。

  • 自定义组件的成员变量本地初始化有些是可选的,有些是必选的。具体是否需要本地初始化,是否需要从父组件通过参数传递初始化子组件的成员变量

自定义组件通用样式

自定义组件通过“.”链式调用的形式设置通用样式。

@Component
struct ChildComponent {build() {Button(`Hello World`)}
}@Entry
@Component
struct MyComponent {build() {Row() {ChildComponent().width(200).height(300).backgroundColor(Color.Red)}}
}

HarmonyOS官网学习指南

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

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

相关文章

【ElasticSearch】学习笔记

一、lucene的组成 segment是一个具备完整搜索功能的最小单元。 多个segment组成了一个单机文本检索库lucene。 inverted index:倒排索引,用于快速根据关键词找到对应的文章term index: 构建出关键词的目录树,解决了term dictionary数据量过大&#xff…

ChatGPT、DeepSeek、Grok:AI 语言模型的差异与应用场景分析

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 1. 引言 人工智能(AI)语言模型正在快速发展,ChatGPT(OpenAI)、DeepSe…

正点原子[第三期]Arm(iMX6U)Linux移植学习笔记-4 uboot目录分析

前言: 本文是根据哔哩哔哩网站上“Arm(iMX6U)Linux系统移植和根文件系统构键篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。 引用: …

matlab 控制系统GUI设计-PID控制超前滞后控制

1、内容简介 matlab164-控制系统GUI设计-PID控制超前滞后控制 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略

介绍HTTP协议基本结构与Linux中基本实现HTTPServer

介绍HTTP协议基本结构与基本实现HTTPServer HTTP协议 前面已经了解了协议的重要性并且已经定义了属于我们自己的协议,但是在网络中,已经有一些成熟的协议,最常用的就是HTTP协议 在互联网世界中,HTTP(HyperText Tran…

Git使用和原理(3)

1.远程操作 1.1分布式版本控制系统 我们⽬前所说的所有内容(⼯作区,暂存区,版本库等等),都是在本地!也就是在你的笔记本或者 计算机上。⽽我们的 Git 其实是分布式版本控制系统!什么意思呢&a…

c语言zixue

该文主要是记录我学习中遇到的一些重点、易出问题的内容 教材p16.17 先从一个简单的例子开始吧 #include <stdio.h> //编译预处理命令 int main() //程序的主函数 {printf("To C"); //输出语句return 0; //返回语句 } #include <stdio.h>是编译预…

【开源代码解读】AI检索系统R1-Searcher通过强化学习RL激励大模型LLM的搜索能力

关于R1-Searcher的报告&#xff1a; 第一章&#xff1a;引言 - AI检索系统的技术演进与R1-Searcher的创新定位 1.1 信息检索技术的范式转移 在数字化时代爆发式增长的数据洪流中&#xff0c;信息检索系统正经历从传统关键词匹配到语义理解驱动的根本性变革。根据IDC的统计…

从0到1入门Docker

一、快速入门 Docker run命令中的常见参数 -d&#xff1a;让容器后台运行--name&#xff1a;给容器命名&#xff08;唯一&#xff09;-e&#xff1a;环境变量-p&#xff1a;宿主机端口映射到容器内端口镜像名称结构&#xff1a;Repository &#xff1a;TAG&#xff08;镜像名&…

接口自动化入门 —— Jmeter实现在接口工具中关联接口处理方案

1. JMeter 接口关联处理的核心概念 接口关联是指在多个接口请求之间共享数据&#xff0c;例如将一个接口的返回值作为另一个接口的输入参数。常见的场景包括&#xff1a; 使用登录接口返回的 Token 作为后续接口的认证信息。 将一个接口返回的 ID 作为另一个接口的请求参数。…

Flink-学习路线

最近想学习一下Flink&#xff0c;公司的实时需求还是不少的&#xff0c;因此结合ai整理了一份学习路线&#xff0c;记录一下。 当然&#xff0c;公司也有Scala版本Flink框架&#xff0c;也学习了一下。这里只说Java版本 1. Java基础 目标: 掌握Java编程语言的基础知识。 内容…

ranger集成starrock报错

org.apache.ranger.plugin.client.HadoopException: initConnection: Unable to connect to StarRocks instance, please provide valid value of field : {jdbc.driverClassName}.. com.mysql.cj.jdbc.Driver. 可能的原因 JDBC 驱动缺失&#xff1a;运行环境中没有安装 MySQL …

Blender-MCP服务源码2-依赖分析

Blender-MCP服务源码2-依赖分析 有个大佬做了一个Blender-MCP源码&#xff0c;第一次提交代码是【2025年3月7号】今天是【2025年月15日】也就是刚过去一周的时间&#xff0c;所以想从0开始学习这个代码&#xff0c;了解一下大佬们的开发思路 1-核心知识点 from mcp.server.fas…

反射(第三篇)、代理模式、静态代理和动态代理、InvocationHandler实际应用

DAY11.3 Java核心基础 反射&#xff08;第三篇&#xff09; 前两篇我们学习了反射的概念和基本操作 实际开发中&#xff0c;反射应用于那里&#xff1f; 动态代理 java中的动态代理就是一个重要的作用 代理模式 代理模式是java中常用的设计模式 指的是在处理一个业务逻辑…

数学建模 第一节

目录​​​​​​ 前言 一 优化模型的类型 二 线性规划1 线性规划2 三 0-1规划 总结 前言 数学建模主要是将问题转化为模型&#xff0c;然后再以编程的形式输出出来 算法都知道&#xff0c;数学建模也需要用到算法&#xff0c;但是不是主要以编程形式展示&#xff0c;而是…

网络空间安全(32)Kali MSF基本介绍

前言 Metasploit Framework&#xff08;简称MSF&#xff09;是一款功能强大的开源安全漏洞检测工具&#xff0c;被广泛应用于渗透测试中。它内置了数千个已知的软件漏洞&#xff0c;并持续更新以应对新兴的安全威胁。MSF不仅限于漏洞利用&#xff0c;还包括信息收集、漏洞探测和…

目标在哪里?——寻找人生的意义与方向

在职场中&#xff0c;许多人都会经历这样的困惑&#xff1a;工作看似顺利&#xff0c;却逐渐失去了成就感和成长感。一位在500强企业工作的学员就遇到了这样的问题。她曾考虑过转型做培训&#xff0c;但苦于找不到明确的切入点&#xff0c;对未来的目标感到迷茫。她不禁问自己&…

C++类与对象——拷贝构造与运算符重载

拷贝构造函数和赋值运算符重载就是C类默认六个函数之二。 拷贝构造函数&#xff1a; 如果⼀个构造函数的第⼀个参数是自身类类型的引用&#xff0c;且任何额外的参数都有默认值&#xff0c;则此构造函数 也叫做拷贝构造函数&#xff0c;也就是说拷贝构造是⼀个特殊的构造函数…

Linux:进程程序替换

目录 前言 一 进程程序替换的概念 二 进程程序替换的原理 三 为什么需要进行进程程序替换 四 如何进行进程程序替换 1. 进程替换函数 ➊ execl()函数 ➋execv()函数 ➌execlp()函数 ➍execle()函数 ➎execve()* 前言 一般情况下&#xff0c;对应的语言写的程序只…

Umi-OCR 全家桶

介绍&#xff1a; 下载 访问官网地址 https://github.com/hiroi-sora/umi-ocrhttps://github.com/hiroi-sora/umi-ocr 点击下载&#xff08;.exe 文件 安装即可&#xff09; 桌面使用 安装完毕后去安装路径下点击 Umi-OCR.exe &#xff08;默认不会生成桌面的快捷方式&…