鸿蒙NEXT-状态管理V1和状态管理V2的差别

简介: 在V2中,子组件通过@Event调用父组件事件实现双向绑定,需使用箭头函数确保this指向正确。@State改为@Local,不能与@Observed混用。@Watch变更为@Monitor,配合@Trace实现深层监听。示例展示了@Event、@Local、@Monitor的基本用法,适用于ArkTS组件间通信和状态管理。


1.在V2中没有了@Link,来进行父组件和子组件的双向绑定。
所以我们需要在子组件中通过@Event,调用父组件的事件,来实现装饰回调(白话来讲就是:子组件调用@Event装饰的函数,传入参数,修改父组件中的参数)。在父组件中,传入函数给子组件,注意需要使用箭头函数来包裹我们写入事件的函数,保证我们传入的事件的this不为空。
@Event只能使用在@ComponentV2装饰的组件中使用
示例代码:

@Entry
@ComponentV2
struct Index {
@Local title: string = "待修改";

build() {
Column() {
Child({
changeFactory: () => {
this.title="已修改"
}
})
}
}
}

@ComponentV2
struct Child {
@Event changeFactory: () => void = () => {};
build() {
Column() {
Button("改变标题")
.onClick(() => {
this.changeFactory();
})
}
}
}

2.V1中的@State转变成了@Local
@State装饰器不能感知到从外部进行的初始化
名字变了,写法仍然相同,但@Local无法和@Observed装饰的类实例对象混用。其他相同:例如,装饰简单类型数组和值类型时,可以观察到数组整体或数组项的变化和值类型的变化。

3.@Watch在V2中是@Monitor
在V1中@Watch只能监听到第一层属性变化,而在V2中@Monitor,修饰,在对应的深层变量中使用@Trace,搭配使用,可以进行深层监听。
简单实现示例代码:

@Entry
@ComponentV2
struct monitorExample {
@Local apple: number = 0;
@Monitor('apple')
onFruitChange(monitor: IMonitor) {
console.log(apple changed from ${monitor.value()?.before} to ${monitor.value()?.now});
}

build() {
Column(){
Text(apple count: ${this.apple})
Button("add apple")
.onClick(()=> {
this.apple++;
})
}
}
}

扩展:

V1:依赖装饰器链(如@State+@ObjectLink)实现单向数据流,仅支持对象第一层属性的观测。嵌套对象需逐层封装组件,代码冗余。
V2:通过@ObservedV2+@Trace实现深度属性监听,支持任意层级嵌套对象的属性变更检测(如obj.a.b.c),无需额外组件封装

相关文章
|
3月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:外卖App
仓颉语言实战分享,教你如何用仓颉开发外卖App界面。内容包括页面布局、导航栏自定义、搜索框实现、列表模块构建等,附完整代码示例。轻松掌握Scroll、List等组件使用技巧,提升HarmonyOS应用开发能力。
|
2月前
|
移动开发 前端开发 JavaScript
鸿蒙NEXT时代你所不知道的全平台跨端框架:CMP、Kuikly、Lynx、uni-app x等
本篇基于当前各大活跃的跨端框架的现状,对比当前它们的情况和未来的可能,帮助你在选择框架时更好理解它们的特点和差异。
285 0
|
3月前
|
安全 API 开发工具
【HarmonyOS NEXT】一键扫码功能
这些Kit为我们应用开发提升了极大地效率。很多简单的功能,如果不需要太深的定制化需求,直接调用kit提供的API就可以实现,在android或者ios上需要很多代码才能实现的功能效果。
108 0
HarmonyOS NEXT仓颉开发语言实战案例:电影App
周末好!本文分享使用仓颉语言重构ArkTS实现的电影App案例,对比两者在UI布局、组件写法及语法差异。内容包括页面结构、列表分组、分类切换与电影展示等。通过代码演示仓颉在HarmonyOS开发中的应用。##仓颉##ArkTS##HarmonyOS开发
|
3月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:健身App
本期分享一个健身App首页的布局实现,顶部采用Stack容器实现重叠背景与偏移效果,列表部分使用List结合Scroll实现可滚动内容。代码结构清晰,适合学习HarmonyOS布局技巧。
HarmonyOS NEXT仓颉开发语言实战案例:小而美的旅行App
本文分享了一个旅行App首页的设计与实现,使用List容器搭配Row、Column布局完成个人信息、功能列表及推荐模块的排版,详细展示了HarmonyOS下的界面构建技巧。
|
9天前
|
存储 缓存 5G
鸿蒙 HarmonyOS NEXT端云一体化开发-云存储篇
本文介绍用户登录后获取昵称、头像的方法,包括通过云端API和AppStorage两种方式,并实现上传头像至云存储及更新用户信息。同时解决图片缓存问题,添加上传进度提示,支持自动登录判断,提升用户体验。
57 0
|
9天前
|
存储 负载均衡 数据库
鸿蒙 HarmonyOS NEXT端云一体化开发-云函数篇
本文介绍基于华为AGC的端云一体化开发流程,涵盖项目创建、云函数开通、应用配置及DevEco集成。重点讲解云函数的编写、部署、调用与传参,并涉及环境变量设置、负载均衡、重试机制与熔断策略等高阶特性,助力开发者高效构建稳定云端服务。
81 0
鸿蒙 HarmonyOS NEXT端云一体化开发-云函数篇
|
9天前
|
存储 JSON 数据建模
鸿蒙 HarmonyOS NEXT端云一体化开发-云数据库篇
云数据库采用存储区、对象类型、对象三级结构,支持灵活的数据建模与权限管理,可通过AGC平台或本地项目初始化,实现数据的增删改查及端侧高效调用。
34 0
|
9天前
|
存储 开发者 容器
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
本文介绍了ArkTS语言中的Class类、泛型、接口、模块化、自定义组件及状态管理等核心概念,并结合代码示例讲解了对象属性、构造方法、继承、静态成员、访问修饰符等内容,同时涵盖了路由管理、生命周期和Stage模型等应用开发关键知识点。
85 0
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例