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

在这里插入图片描述

在这里插入图片描述

前言

本节开始正式接触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 = 1
  build() {
    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;

  // 通过闭包引用外部状态,而非值传递参数
  @Builder
  constNUM(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,对应num
      this.constNUM(1); // 传递索引1,对应num1
      this.constNUM(2); // 传递索引2,对应num2
    }
  }
}

7、动态数据交互效果

概念

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

测试

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

在这里插入图片描述

代码

interface StuItemType{
  name:string
  age:number
  id: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天左右结束,希望大家可以支持一下,感兴趣的可以加我进行私聊,让我们一起走在学习的路上。

内容概要:本文档为《精心整理的 C语言教程、案例与项目实战资源》,涵盖从零基础入门到进阶项目开发的内容,分为教程推荐、项目案例、开发环境与工具、学习资源与书籍推荐、学习建议与进阶路径、常见技术点与实现技巧、高级项目案例与实战以及面试与求职准备。它提供了多种学习途径,如系统化视频课程、在线文档、实用项目案例、编译器与IDE的选择等,并针对指针、结构体、文件操作、多文件项目、算法与数据结构等技术点进行了详细说明。此外,还列举了操作系统编程、数据库项目、嵌入式开发等高级项目案例,最后提供了常见面试题目和代码优化技巧; 适用人群:适合从零基础入门到进阶学习的C语言爱好者、高校学生、自学者以及有求职需求的学习者; 使用场景及目标:①为初学者提供系统化的学习路径,帮助他们掌握C语言的基础语法、数据类型、控制结构和函数等基础知识;②通过项目实践巩固所学知识,如学生成绩管理系统、贪吃蛇游戏、银行管理系统等;③对于进阶学习者,提供深入学习指针、结构体、文件操作、动态内存管理等高级内容的机会;④为有求职需求的学习者提供面试题目和代码优化技巧; 其他说明:文档不仅提供理论知识,还提供了大量的实战项目案例和源码,便于学习者结合实践进行学习,同时推荐了多种学习资源,如书籍、网站和开源项目,以满足不同层次学习者的需求。
评论 40
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值