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

双非大学生自学鸿蒙5.0零基础入门到项目实战 -ArkTs核心

在这里插入图片描述

  • 个人首页: VON

  • 鸿蒙系列专栏: 鸿蒙开发小型案例总结

  • 综合案例 :鸿蒙综合案例开发

  • 鸿蒙6.0:从0开始的开源鸿蒙6.0.0

  • 文章所属专栏:鸿蒙5.0零基础入门到项目实战

ArkTs核心

  • 前言
  • 实践
    • 1、if分支语句
      • 概念
      • 测试
      • 代码
    • 2、条件表达式
      • 概念
      • 测试
      • 代码
    • 3、条件渲染
      • 概念
      • 测试
      • 代码
    • 4、循环渲染
      • 概念
      • 测试
      • 代码
    • 5、状态管理和事件
      • 概念
      • 测试
      • 代码
    • 6、@Builder
      • 概念
      • 测试
      • 代码
    • 7、动态数据交互效果
      • 概念
      • 测试
      • 代码
  • 结语

在这里插入图片描述

前言

本节开始正式接触ts中的核心逻辑,选择、判断、循环三大件,本节过后就要开始综合案例的实战篇了下周开始实战篇,今天也是从0开始的第二天,两天过完基础语法,其他的知识点就从项目中总结把。废话不多说,开始今天的学习

实践

1、if分支语句

概念

测试

if,else分支,和其他语法没区别,格式都是一样的

在这里插入图片描述

在这里插入图片描述

代码

let age : number = 20
if(age>=18){console.log("成年了");
}
else if(age>0 && age<18){console.log("未成年");
}
else {console.log("年龄错误")
}@Entry
@Component
struct Index {build() {Column() {}}
}

2、条件表达式

概念

在这里插入图片描述

测试

在这里插入图片描述

代码

let num1 : number = 10
let num2 : number = 20
let res = num1 > num2 ? num1 : num2;
console.log("较大值:",res)@Entry
@Component
struct Index {build() {Column() {}}
}

3、条件渲染

概念

在这里插入图片描述

测试

可以看到数字的不同所渲染的页面内容也不同

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码

let num1 : number = 20@Entry
@Component
struct Index {build() {Column() {if(num1 === 1){Text("文本1")}else if(num1 === 2){Text("文本2")}else {Text("文本else")}}}
}

4、循环渲染

概念

在这里插入图片描述

测试

在这里插入图片描述

代码

let arrs : string[] = ["张三","李四","王五"]
@Entry
@Component
struct Index {build() {Column() {ForEach(arrs,(item:string,index:number)=>{Text(item+index)})}}
}

5、状态管理和事件

概念

在这里插入图片描述

测试

这里不知道为何要用V2才会生效,我记得之前学习的时候是不需要进行改变的,这个具体后面再说吧,先不去进行深究
这里的样式是我自己写的可能有点丑陋
在这里插入图片描述

代码

@Entry
@ComponentV2
struct Index {@Local num : number = 1build() {Column() {Row(){Text("+").fontSize(25).border({width:{ left:1, top:1, bottom:1 },radius:{ topLeft:5,bottomLeft:5 },}).padding({left:5}).onClick(()=>{if(this.num>=1){this.num--}})Text(this.num.toString()).fontSize(25).border({width:1,}).padding({left:5,right:5})Text("-").fontSize(25).border({width:{ right:1, top:1, bottom:1 },radius:{ topRight:5,bottomRight:5 },}).padding({right:5}).onClick(()=>{this.num++})}.padding(10).width('100%').height(50)}}
}

6、@Builder

概念

在这里插入图片描述

测试

原本只是像复用下上一个计数器,没想到还不能直接进行复用,具体有以下几点

  • @ComponentV2 装饰器错误鸿蒙 ArkUI 中没有@ComponentV2装饰器,声明式开发范式中组件统一使用@Component装饰器。V2通常用于组件的 API 版本(如@BuilderParam的 V2 版本),而非组件本身的装饰器,此处属于语法错误,应改为@Component。
  • @Local装饰器的使用场景限制@Local是用于父子组件间状态同步的装饰器,通常需要配合@Link或@Prop使用,且只能在自定义组件内部声明子组件时使用。在根组件(@Entry修饰的组件)中直接使用@Local修饰状态变量,不符合其设计初衷,可能导致状态无法正常同步,建议改用@State装饰器(根组件局部状态)。

这里我不知道第一点是否正确,视频中讲解的是可以使用的,不过我之前确实没有听说过这个。
第二点需要重点关注下,

  • constNUM方法参数为值传递,无法修改源变量@Builder构建器的参数是值传递,而非引用传递。在onClick事件中修改的num是参数的副本,而非外部的this.num、this.num1等源变量,导致点击 “+”“-” 按钮时,界面不会更新(源状态未改变)。示例:点击this.constNUM(this.num)中的 “+”,修改的是constNUM方法内部的num参数,而非this.num,因此this.num的值始终为 1,界面无变化。

这是我踩的坑就不给大家看之前的错误代码了,直接看正确代码就行了,上面有注意事项,都有注释帮助大家来理解,这是整体效果
在这里插入图片描述
这里还是要注意一下,不可以直接进行传参,需要通过闭包引用外部状态

代码

@Entry
@Component
struct Index {@State num: number = 1;@State num1: number = 2;@State num2: number = 3;// 通过闭包引用外部状态,而非值传递参数@BuilderconstNUM(index: number) {Row() {Text("+").fontSize(25).border({width: { left: 1, top: 1, bottom: 1 },radius: { topLeft: 5, bottomLeft: 5 },color: '#000'}).padding({ left: 5 }).onClick(() => {// 根据index判断要修改的状态变量if (index === 0 && this.num >= 1) {this.num--;} else if (index === 1 && this.num1 >= 1) {this.num1--;} else if (index === 2 && this.num2 >= 1) {this.num2--;}})Text(this.getNumByIndex(index).toString()) // 动态获取当前值.fontSize(25).border({width: 1,color: '#000'}).padding({ left: 5, right: 5 })Text("-").fontSize(25).border({width: { right: 1, top: 1, bottom: 1 },radius: { topRight: 5, bottomRight: 5 },color: '#000'}).padding({ right: 5 }).onClick(() => {// 根据index修改对应状态变量if (index === 0) {this.num++;} else if (index === 1) {this.num1++;} else if (index === 2) {this.num2++;}})}.padding(10).width('100%').height(50)}// 辅助方法:根据index返回对应状态值private getNumByIndex(index: number): number {switch (index) {case 0: return this.num;case 1: return this.num1;case 2: return this.num2;default: return 0;}}build() {Column() {this.constNUM(0); // 传递索引0,对应numthis.constNUM(1); // 传递索引1,对应num1this.constNUM(2); // 传递索引2,对应num2}}
}

7、动态数据交互效果

概念

黑马中的是歌单交互,我这里使用更简单的学生数据来进行动态展示,感兴趣的可以看下黑马的案例
在这里插入图片描述

测试

这里的样式我并没有进行装饰,只是简单的给大家进行展示,目前我们将所有代码写在一起太过于冗余后面会进行修改的,这里就需要注意我标注的两点即可

在这里插入图片描述

代码

interface StuItemType{name:stringage:numberid:number
}
@Entry
@Component
struct Index {stus : StuItemType[] = [{name:"张三",age:18,id:1},{name:"李四",age:18,id:2},{name:"王五",age:19,id:3},{name:"啊六",age:18,id:4},{name:"刘七",age:18,id:5}]build() {List(){ForEach(this.stus,(item:StuItemType,index:number)=>{ListItem(){Row(){Text(`下标: ${index}`).margin({right:10})Text(item.name).margin({right:10})Text(item.age.toString()).margin({right:10})Text(item.id.toString()).margin({right:10})}}})}}
}

结语

基础部分已经全部结束了,后面的一些小语法就让我们在项目中遇见了在进行解决吧,今天先到这里,明天会进行综合案例的学习,估计2天左右结束,希望大家可以支持一下,感兴趣的可以加我进行私聊,让我们一起走在学习的路上。

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

相关文章:

  • UVa 10989 Bomb Divide and Conquer
  • 【Linux】版本控制器Git和调试器—gdb/cgdb的使用
  • 怎么把个人做的网站上传到网上wordpress用户名钩子
  • 成都网站排名网站添加邮件发送怎么做
  • Spring AI 极简入门:15分钟集成AI到SpringBoot应用
  • 临潼城市建设局网站外资公司注册
  • 1.基础--数据库相关概念
  • 使用DTS迁移工具迁移oracle到DM
  • langchain agent的短期记忆
  • 使用DrissionPage和自动化技术实现得物鞋子信息爬取
  • 做网站的是干嘛的为网站添加统计
  • 网站设计的建设目的做网站推销手表
  • [LitCTF 2023]Vim yyds
  • LNMP环境部署 KodBox私有云盘
  • 解决windows docker开发thinkphp6启动慢的问题
  • Rust编译参数与优化控制
  • springboot后端的接口headers
  • day04(11.2)——leetcode面试经典150
  • mysql常识和jdbc工具类的进化以及连接池思想
  • 七.Docker网络
  • 怎么做免费视频网站吗网站建设哪儿好
  • 推荐优质wordpress外贸网站主题
  • TDengine 数学函数 ASCII 用户手册
  • @Builder注解导致mybatis类型匹配错误 Cannot determine value type from string
  • AI模型开发 | 从零部署Deepseek OCR模型,零门槛开发PDF文档解析工具
  • Linux INPUT 子系统实验
  • 1000套实习报告模板大合集+多行业多专业实习总结实践报告素材
  • 百度网站快速优化国内flask做的网站
  • Spring AI--Prompt、多轮对话实现方案
  • 网页模板免费下载网站广州页面制作公司