状体管理-装饰器

@State 自己的状态
注意:不是状态变量的所有更改都会引起刷新。只有可以被框架观察到的修改才会引起UI刷新。
1、boolean、string、number类型时,可以观察到数值的变化。
2、class或者Object时,可以观察 自身的赋值 的变化,第一层属性赋值的变化,即Object.keys(observedObject)返回的属性。

源代码:

index.ets:

import { componentUtils } from '@kit.ArkUI'interface Car {name: string
}interface Person {name: string,car: Car
}const obj: Person = {name: 'zs',car: {name: '小黄车'}
}
console.log('查看第一层属性',Object.keys(obj))@Entry
@Component
struct Index {// 状态变量// 1、string number boolean可以直接监视到变化@State message: string = 'hello world'// 2、复杂类型 object class 第一层随便改,嵌套的话需要进行整个嵌套对象的替换@State person: Person = {name: 'jack',car: {name: '宝马车'}}build() {Column({space: 10}) {Text(this.message).fontSize(20)Button('改message').onClick(() => {this.message = '你好'})Text(JSON.stringify(this.person))Button('改person').onClick(() => {// 1、全部修改可以// this.person = {//  name: 'any',//  car: {//    name: '保时捷'//  }// }// 2、修改name// this.person.name = 'tony'  修改第一层name可以// 如果不是对象的第一层属性,修改时,需要修改整个对象嵌套的对象,否则页面不会刷新,但是值已经改了// this.person.car.name = '小火车'  // 页面检测不到// console.log('car name', this.person.car.name )// this.person.car = {//   name: '小火车'// }})}.width('100%').height('100%').padding(20).backgroundColor('#ccc')}
}

效果图:

@Prop 父子

@Prop - 父子单向
@Prop 装饰的变量可以和父组件建立单向的同步关系。
@Prop 装饰的变量是可变的,但是变化不会同步回其父组件。

源代码:

import { componentUtils } from '@kit.ArkUI'@Component
struct SonCom {// 保证父组件的数据变化了,能够往下响应式的更新@Prop sCar: string = ''changeCar = ()=> {}build() {Column({space: 10}) {Text(`子组件 - ${this.sCar}`)Button('换车').onClick(() => {// 1、prop传值是单向传递// 子组件可以修改到 prop 传值,但是修改的更新不会同步到父组件// 通常不太会直接修改 prop 传值,因为父组件的状态一旦变化,会自动向下同步// this.sCar = '小黄车'// 2、如果实在想更新,希望保证父子同步 => 调用父组件传递过来的方法// 如果没有写箭头函数,意味着,this 指向调用者,而此处执行环境this -> 子组件this.changeCar()})}.padding(20).backgroundColor(Color.Orange)}
}@Entry
@Component
struct FatherCom {@State fCar: string = '劳斯莱斯'build() {Column({space: 10}) {Text(`父组件 - ${this.fCar}`)Button('换车').onClick(() => {this.fCar = '三轮车'})// 子组件SonCom({sCar: this.fCar,// 这里必须要用箭头函数,否则会有 this 指向的问题// 使用箭头函数的好处,会使用外部环境的this,不受传递过去的执行环境影响// 希望此处 this 指向的是父组件// changeCar(){changeCar: ()=> {console.log('这里可以写具体的业务逻辑')this.fCar = '超级大赛车'}})}.padding(50).backgroundColor(Color.Pink)}
}

效果图:

@Prop 父向子练习

传参:

import { componentUtils } from '@kit.ArkUI'@Component
struct SonCom {// 保证父组件的数据变化了,能够往下响应式的更新@Prop sCar: string = ''changeCar = (newCar: string)=> {}build() {Column({space: 10}) {Text(`子组件 - ${this.sCar}`)Button('换车').onClick(() => {// 1、prop传值是单向传递// 子组件可以修改到 prop 传值,但是修改的更新不会同步到父组件// 通常不太会直接修改 prop 传值,因为父组件的状态一旦变化,会自动向下同步// this.sCar = '小黄车'// 2、如果实在想更新,希望保证父子同步 => 调用父组件传递过来的方法// 如果没有写箭头函数,意味着,this 指向调用者,而此处执行环境this -> 子组件this.changeCar('老爷车')})}.padding(20).backgroundColor(Color.Orange)}
}@Entry
@Component
struct FatherCom {@State fCar: string = '劳斯莱斯'build() {Column({space: 10}) {Text(`父组件 - ${this.fCar}`)Button('换车').onClick(() => {this.fCar = '三轮车'})// 子组件SonCom({sCar: this.fCar,// 这里必须要用箭头函数,否则会有 this 指向的问题// 使用箭头函数的好处,会使用外部环境的this,不受传递过去的执行环境影响// 希望此处 this 指向的是父组件// changeCar(){changeCar: (newCar: string)=> {console.log('这里可以写具体的业务逻辑')this.fCar = newCar}})}.padding(50).backgroundColor(Color.Pink)}
}

@Prop 父向子 练习二

import { componentUtils } from '@kit.ArkUI'// comp
@Component
struct NumberCount {@Prop num: number = 1subFn = ()=> {}addFn = ()=> {}build() {// 数字框组件Row({ space: 5 }) {Button('-').onClick(() => {this.subFn()})Text(this.num.toString())Button('+').onClick(() => {this.addFn()})}}
}@Entry
@Component
struct Index {@State num1: number = 5@State num2: number = 3build() {Column() {Row() {Text('茄子')NumberCount({ num: this.num1, addFn: () => {this.num1++}, subFn: ()=> {this.num1--}})}Row() {Text('香蕉')NumberCount({ num: this.num2, addFn: () => {this.num2++}, subFn: ()=> {this.num2++}})}}}
}

效果图:

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

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

相关文章

CC++:贪吃蛇小游戏教程

❀创作不易,关注作者不迷路❀😀😀 目录 😀贪吃蛇简介 😃贪吃蛇的实现 🐍生成地图 🐍生成蛇模块 ❀定义蛇的结构体 ❀初始化蛇的相关信息 ❀初始化食物的相关信息 🐍光标定位和…

[Spring] SpringBoot统一功能处理与图书管理系统

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

USB 2.0 规范摘录

文章目录 1、USB 体系简介2、USB 数据流模型四种传输类型 3、USB 物理规范和电气规范4、USB 协议层规范事务传输(Transaction)的流程 5、USB 框架6、USB 主机:硬件和软件7、USB HUB 规范数据的转发唤醒信号的转发USB HUB 的帧同步HUB Repeate…

前端常见场景、JS计算精度丢失问题(Decimal.js 介绍)

目录 一. Decimal.js 介绍 二. 常用方法 1. 创建 Decimal 实例 2.加法 add 或 plus 3.减法 sub 或 minus 4.乘法 times 或 mul 5.除法 div 或 dividedBy 6.取模 7.幂运算 8.平方根 9.保留小数位 toFixed方法(四舍五入) 三.项目应用 前端精度丢失问题通常由以下原因…

【Kubernetes】kubeadmu快速部署k8s集群

目录 一.组件部署 二.环境初始化 三.所有节点部署docker,以及指定版本的kubeadm 四.所有节点安装kubeadm,kubelet和kubectl 五.高可用配置 六.部署K8S集群 1.master01 节点操作 2.master02、master03节点 3.master01 节点 4.master02、master…

C语言 ——— 学习、使用 strcmp函数 并模拟实现

目录 strcmp函数的功能 学习strcmp函数​编辑 使用strcmp函数 模拟实现strcmp函数 strcmp函数的功能 strcmp函数的功能是字符串比较,两个字符串的对应位置的字符进行比较,直到字符不同或达到终止的 \0 字符为止 举例说明: 字符串1&am…

leetcode-二叉树oj题1(共三道)--c语言

目录 a. 二叉树的概念以及实现参照博客: 一、三道题的oj链接 二、每题讲解 1.单值二叉树 a. 题目: b. 题目所给代码 c. 思路 d. 代码: 2. 相同的树 a. 题目 b. 题目所给代码 c. 思路 d. 代码 3. 二叉树的前序遍历 a. 题目 b.…

前端-05-VSCode自定义代码片段console.log(js/ts配置)、代码段快捷提示放在首位

目录 配置VSCode自定义代码片段console.log()log代码段快捷提示放在首位 配置VSCode自定义代码片段console.log() 点击VSCode左下角设置图标,点击用户代码片段 点击用户代码片段后,VSCode上方出现弹窗如下图(没有显示这两个文件的话搜索一下…

Redis结合Lua脚本的简单使用

我们就拿购物车举例子 现在有5个东西免费送&#xff0c;我们只能选择1个 例如 可乐 美年达 香蕉 苹果 薯片 我们选择后就放进redis里面 然后我们不能选重复&#xff0c;只能选不同 Lua脚本 我们redis使用lua脚本的时候&#xff0c;会传两个参数进去 一个是List<Strin…

MySQL:数据库权限与角色

权限 MySQL 的权限管理系统是保障数据库安全性的关键组件之一。它允许数据库管理员精确控制哪些用户可以对哪些数据库对象执行哪些操作。 自主存取控制 DAC&#xff08;DiscretionaryAccess Control)&#xff1a;用户对于不同的数据库对象有不同的存取权限&#xff0c;不同的…

fatal: Could not read from remote repository. 解决方法

问题描述&#xff1a; Git : fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists。 解决方法&#xff1a; 当在网上尝试大量方法仍然失败的时候&#xff0c;不妨试试这个方法。 在 github 上&…

thinkphp框架远程代码执行

一、环境 vulfocus网上自行下载 启动命令&#xff1a; docker run -d --privileged -p 8081:80 -v /var/run/docker.sock:/var/run/docker.sock -e VUL_IP192.168.131.144 8e55f85571c8 一定添加--privileged不然只能拉取环境首页不显示 二、thinkphp远程代码执行 首页&a…

鸿蒙媒体开发【拼图】拍照和图片

拼图 介绍 该示例通过ohos.multimedia.image和ohos.file.photoAccessHelper接口实现获取图片&#xff0c;以及图片裁剪分割的功能。 效果预览 使用说明&#xff1a; 使用预置相机拍照后启动应用&#xff0c;应用首页会读取设备内的图片文件并展示获取到的第一个图片&#x…

2024关于日本AI 领域TOP12 的大学介绍

1.东京大学 &#xff08;The University of Tokyo&#xff09; 位于&#xff1a;日本东京都文京区本郷七丁目3 番1 号 网址&#xff1a;東京大学 东京大学也被称为UTokyo 或东大&#xff0c;是日本第一所国立大学。作为领先的研究型 大学&#xff0c;东京大学提供基本所有…

8月17日|广州|Cocos开发者沙龙不见不散!

6月底举行的Cocos成都沙龙吸引了近200位开发者和10多家发行&#xff0c;得到了大家的一致好评。 Cocos广州沙龙即将到来&#xff0c;会邀请更多KOL和头部发行、渠道嘉宾分享行业经验&#xff0c;让大家实现技术干货、游戏合作、行业信息多丰收。 活动主题&#xff1a;小游戏与出…

vscode+git解决远程分支合并冲突

1&#xff09;远程分支和远程分支不复杂情况合并 例如readme的冲突 可直接在github上解决 删到只剩下 #supergenius002 合并冲突测试1/合并测试冲突1合并测试冲突2/合并测试冲突2就行 《《《/》》》也要删掉 2&#xff09;但如果是复杂的冲突&#xff0c;让我们回到vscod…

C++进阶:设计模式___适配器模式

前言 在C的基础语法的学习后,更进一步为应用场景多写代码.其中设计模式是有较大应用空间. 引入 原本在写容器中适配器类有关的帖子,发现适配模式需要先了解,于是试着先写篇和适配器模式相关的帖子 理解什么是适配器类,需要知道什么是适配器模式.适配器模式是设计模式的一种.笔…

剪画小程序:致敬奥运举重冠军:照片变成动漫风格!

在巴黎奥运会的赛场上&#xff0c;那些奥运冠军们的身影如同璀璨星辰&#xff0c;闪耀着无尽的光芒&#xff01; 看&#xff0c;举重冠军力拔山兮气盖世&#xff0c;那坚定的眼神中透露出无畏的勇气&#xff0c;爆发的力量更是震撼人心。 借助剪画&#xff0c;将这令人心潮澎湃…

LabVIEW激光主动探测系统

开发了一种基于LabVIEW的高性能激光主动探测控制与处理系统的设计与实现。该系统充分利用了LabVIEW的多线程和模块化设计优势&#xff0c;提供了一套功能完整、运行高效且稳定的解决方案&#xff0c;适用于高精度激光探测领域。 项目背景 激光主动探测技术利用激光作为主动光源…

基于SpringBoot+Vue的汽车服务管理系统(带1w+文档)

基于SpringBootVue的汽车服务管理系统(带1w文档) 基于SpringBootVue的汽车服务管理系统(带1w文档) 在开发系统过程中采用Java语言、MySQL数据库存储数据。系统以B/S为基础&#xff0c;实现管理一体化、规范化&#xff0c;为用户提供一个高效快捷的交流系统[5]。利用springboot架…