鸿蒙开发之状态管理@Observed和@ObjectLink

一、使用场景

当对象内引用对象,改变内部对象属性的时候其他状态管理如@State、@Provide、@Consume等是无法触发更新的。同样,在数组内如果有对象,改变对象的属性也是无法更新的。在这种情况下就可以采用@Observed和@ObjectLink装饰器了。

二、使用方式

在我们需要监控的对象组件使用@Observed装饰,将需要变更的地方抽取出来作为一个新的组件,新组件内部引用对象使用@ObjectLink装饰。

例如, 在案例代码 这个基础上,我们需要在点击任务完成的时候,修改任务列表卡片的文字颜色,并中划线。这就涉及到了修改任务数组中Task对象的属性,需要更新UI。就需要@Observed和@ObjectLink结合使用。

 show code (在案例代码基础上做处理)

//需要监控的组件使用@Observed装饰
@Observed
class Task {static  id: number = 1name:string = '任务名称'+Task.id++finished:boolean = false
}

抽离之前任务列表的item为一个新组件

@Component
struct TaskItem {//接收父组件中传递的task,使用@ObjectLink装饰@ObjectLink task: Task//父组件中处理数据更新的方法handTasks: () => voidbuild() {Row() {if (this.task.finished) {Text(this.task.name).tasksuccessed()} else {Text(this.task.name)}Checkbox().select(this.task.finished).onChange(value => {this.task.finished = valueconsole.log('任务状态' + value + '')this.handTasks()})}.card().justifyContent(FlexAlign.SpaceBetween)}
}
//父组件中的任务列表List({ space: 10 }) {ForEach(this.tasks, (task: Task, index) => {ListItem() {//将父组件的渲染交给新组件TaskItem({task:task,handTasks:this.handleTaskNumber.bind(this)})}.swipeAction({ end: this.deleteButton(index) })}, item => '' + item.name)}

其中,需要注意的第一点,传递父组件的方法时,传递的是this.handleTaskNumber没有()。如果传递()就表示方法调用了。

需要注意第二点,我们在将父组件方法传递给子组件的时候。如果没有bind(this)处理,默认调用的父组件方法的this就是子组件。所以,我们需要bind(this)永远使用父组件来调用父组件的方法。

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

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

相关文章

C# WPF上位机开发(简易图像处理软件)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 图像处理是工业生产重要的环节。不管是定位、测量、检测还是识别,图像处理在工业生产中扮演重要的角色。而c#由于自身快速开发的特点&a…

玩转 Go 语言并发编程:Goroutine 实战指南

一、goroutine 池 本质上是生产者消费者模型在工作中我们通常会使用可以指定启动的 goroutine 数量-worker pool 模式,控制 goroutine 的数量,防止 goroutine 泄漏和暴涨一个简易的 work pool 示例代码如下: package mainimport ("fmt…

小程序跳转tabbar,tabbar页面不刷新

文章地址:12.小程序 之切换到tabBar页面不刷新问题_360问答 解决办法备份: wx.switchTab:跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面 wx.reLaunch:关闭所有页面,打开到应用内的某个页面。 wx.reLa…

解决微信小程序中 ‘nbsp;‘ 空格不生效的问题

在微信小程序开发中,我们经常会使用 来表示一个空格。这是因为在 HTML 中,空格会被解析为一个普通字符,而不会产生实际的空白间距。而 是一种特殊的字符实体,它被解析为一个不可见的空格,可以在页面上产生真正的空…

力扣70. 爬楼梯

动态规划 思路: 使用递归比较容易理解, f(n) f(n - 1) f(n - 2); 到剩余1级台阶有 f(n - 1),到剩余2级台阶有 f(n-2);边界情况是 n 0, f(0) 1n 1, f(1) 1n 2, f(2) 2 递归代码实现: class Soluti…

Axure RP 9 入门教程

1. Axure简介 Axure 是一个交互式原型设计工具,可以帮助用户创建复杂的交互式应用程序和网站。Axure 能够让用户快速构建出具有高度可交互性的原型,可以在团队中进行协作、分享和测试。 使用 Axure 可以设计出各种不同类型的原型,包括网站、移…

系列十五、搭建redis集群

一、概述 上篇文章介绍了redis集群的相关知识,本章实战演示redis的集群环境的详细搭建步骤。如果帮助到了你,请点赞 收藏 关注!有疑问的话也可以评论区交流。 二、搭建步骤 2.1、预备知识 判断一个集群中的节点是否可用,是集群…

【SpringBoot篇】详解基于Redis实现短信登录的操作

文章目录 🥰前言🛸StringRedisTemplate🌹使用StringRedisTemplate⭐常用的方法 🛸为什么我们要使用Redis代替Session进行登录操作🎆具体使用✨编写拦截器✨配置拦截器🌺基于Redis实现发送手机验证码操作&am…

EarCMS 前台任意文件上传漏洞复现

0x01 产品简介 EarCMS是一个APP内测分发系统的平台。 0x02 漏洞概述 EarCMS前台put_upload.php中,存在pw参数硬编码问题,同时sql语句pdo使用错误,没有有效过滤sql语句,可以控制文件名和后缀,导致可以任意文件上传。 0x03 复现环境 FOFA:app="EearCMS" 0x0…

Flutter实现自定义二级列表

在Flutter开发中,其实系统已经给我们提供了一个可靠的二级列表展开的API(ExpansionPanelList),我们先看系统的二级列表展开效果,一次只能展开一个,用ExpansionPanelList.radio实现 由此可见,已经…

容器化升级对服务有哪些影响?

容器技术是近几年计算机领域的热门技术,特别是随着各种云服务的发展,越来越多的服务运行在以 Docker 为代表的容器之内。 本文我们就来分享一下容器化技术相关的知识。 容器化技术简介 相比传统虚拟化技术,容器技术是一种更加轻量级的操作…

分治法求最大子列和

给定N个整数的序列{ A1, A2, …, AN},其中可能有正数也可能有负数,找出其中连续的一个子数列(不允许空序列),使它们的和尽可能大,如果是负数,则返回0。使用下列函数,完成分治法求最大…

CorelDRAW软件2024版本好用吗?有哪些功能优势

CorelDRAW是一款综合性强大的专业平面设计软件,其功能覆盖了矢量图形设计、高级文字编辑、精细绘图以及多页文档和页面设计。该软件不仅适用于广告设计、包装设计,还广泛应用于出版、网页设计和多媒体制作等多个领域。下面就给大家介绍一下CorelDRAW这款…

0012Java安卓程序设计-ssm记账app

文章目录 **摘要**目 录系统设计5.1 APP端(用户功能)5.2后端管理员功能模块开发环境 编程技术交流、源码分享、模板分享、网课分享 企鹅🐧裙:776871563 摘要 网络的广泛应用给生活带来了十分的便利。所以把记账管理与现在网络相…

arkts编译报错-arkts-limited-stdlib错误【Bug已完美解决-鸿蒙开发】

文章目录 项目场景:问题描述原因分析:解决方案:适配指导案例此Bug解决方案总结项目场景: arkts编译报错-arkts-limited-stdlib错误。 我用Deveco studio4.0 beta2开发应用,报arkts-limited-stdlib错误 报错内容为: ERROR: ArKTS:ERROR File: D:/prRevivw/3792lapplica…

[Verilog]用Verilog实现串并转换/并串装换

用Verilog实现串并转换/并串装换 摘要 一、串并转换模块 串转并就是将低3位信号和输入信号一起赋值。因为经过转换后,码元速率会将为原来四分之一,所以设置4分频时钟,将其输出。而并转串就是不断右移,取高位输出。 module serial…

Android 11.0 systemui锁屏页面时钟显示样式的定制功能实现

1.前言 在11.0的系统ROM定制化开发中,在进行systemui的相关开发中,当开机完成后在锁屏页面就会显示时间日期的功能,由于 开发产品的需求要求时间显示周几上午下午接下来就需要对锁屏显示时间日期的相关布局进行分析,然后实现相关功能 效果图如图: 2.systemui锁屏页面时钟显…

mysql原理--B+树索引

1.没有索引的查找 1.1.在一个页中的查找 (1). 以主键为搜索条件 可以在 页目录 中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指定的记录。 (2). 以其他列作为搜索条件 这种情况下只能从 最小记录 开始依次遍历单链表中的每条记录&am…

值得收藏的练习打字网站

本文对一些好用的练习打字的网站进行了汇总整理,方便大家使用 一:程序猿练习打字: 1.Typing Practice for Programmers http://Typing.io 是程序员的打字导师。它的练习课程基于开源代码,让你在不断的练习中提升自己的码字速度…

Python:核心知识点整理大全15-笔记

目录 ​编辑 7.3.2 删除包含特定值的所有列表元素 pets.py 7.3.3 使用用户输入来填充字典 mountain_poll.py 7.4 小结 第8章 函 数 8.1 定义函数 greeter.py 8.1.1 向函数传递信息 8.1.2 实参和形参 8.2.1 位置实参 2. 位置实参的顺序很重要 8.2.2 关键字实参 往…