鸿蒙Next组件状态管理装饰器V1
2025-06-27 22:37:14
117次阅读
0个评论
使用装饰器实现数据变化,view自动响应变化
常用的搭配有四种
State :修饰的变量实现组件内的动态响应 父State+子PropLink:父子数据单向同步,父组件数据变化,父子组件都可以接收响应,子组件修改数据,父组件不会收到 父State+子Link:父子数据双向同步,父子组件的数据任何一个发生变化,view都会响应变化 父Provide+子Consume:父组件与后台组件双向同步,初始化子布局时不需要传参,只需要在子组件声明相同变量名的参数就可以响应 Observed+父State+子ObjectLink:父子使用对象数据时的双向同步
@Entry
@Component
struct User{
@State userName:string='张三'
@State tall:string='170'
@Provide age:string='18'
@State person:Person = new Person('李四',20)
build() {
Column({space:20}){
Stack(){
Text('父组件 State 修饰:'+this.userName).fontSize(20).fontColor(Color.White)
}.alignContent(Alignment.Center)
.width('100%')
.height(60)
.backgroundColor(Color.Blue)
.onClick(()=>{
//是为了每次点击能发生数据变化
this.userName='点击了父组件 uaerName'+Math.floor(Math.random() * 11)
})
Stack(){
Text('父组件 State 修饰:'+this.tall).fontSize(20).fontColor(Color.White)
}.alignContent(Alignment.Center)
.width('100%')
.height(60)
.backgroundColor(Color.Green)
.onClick(()=>{
this.tall='点击了父组件 tall'
})
Stack(){
Text('父组件 Provide 修饰:'+this.age.toString()).fontSize(20).fontColor(Color.White)
}.alignContent(Alignment.Center)
.width('100%')
.height(60)
.backgroundColor(Color.Brown)
.onClick(()=>{
this.age='点击了父组件 age'
})
Stack(){
Text('父组件 State 修饰:'+this.person.name).fontSize(20).fontColor(Color.White)
}.alignContent(Alignment.Center)
.width('100%')
.height(60)
.backgroundColor(Color.Grey)
.onClick(()=>{
this.person.name='李思思'
})
Text('------下面是引用的子组件---------')
child({userName:this.userName,tall:this.tall,person:this.person})
}
}
}
@Component
struct child{
@Prop userName:string
@Link tall:string
@Consume age:string
@ObjectLink person:Person
build() {
Column({space:20}){
Stack(){
Text('子组件 Prop 修饰:'+this.userName).fontSize(20).fontColor(Color.White)
}.alignContent(Alignment.Center)
.width('100%')
.height(60)
.backgroundColor(Color.Blue)
.onClick(()=>{
this.userName='点击了子组件'
})
Stack(){
Text('子组件 Link 修饰:'+this.tall).fontSize(20).fontColor(Color.White)
}.alignContent(Alignment.Center)
.width('100%')
.height(60)
.backgroundColor(Color.Green)
.onClick(()=>{
this.tall='点击了子组件'
})
Stack(){
Text('子组件 Consume 修饰:'+this.age.toString()).fontSize(20).fontColor(Color.White)
}.alignContent(Alignment.Center)
.width('100%')
.height(60)
.backgroundColor(Color.Brown)
.onClick(()=>{
this.age='点击了子组件'
})
Stack(){
Text('子组件 ObjectLink 修饰:'+this.person.name).fontSize(20).fontColor(Color.White)
}.alignContent(Alignment.Center)
.width('100%')
.height(60)
.backgroundColor(Color.Grey)
.onClick(()=>{
this.person.name='李四'
})
}
}
}
@Observed
class Person{
name:string=''
age:number=0
constructor(name:string,age:number) {
this.name=name;
this.age=age;
}
}
00
- 0回答
- 0粉丝
- 0关注
相关话题
- 【HarmonyOS Next】鸿蒙状态管理装饰器V1和V2混用方案
- 鸿蒙-状态管理V1
- 鸿蒙NEXT-状态管理V1和状态管理V2的差别
- 鸿蒙Next状态管理装饰器V2 @Provider @Consumer
- 【HarmonyOS Next】鸿蒙状态管理V2装饰器详解
- V1 管理应用拥有的状态
- 鸿蒙-状态管理V1和V2在ForEach循环渲染的表现
- 鸿蒙Next状态管理装饰器V2 @Param@Once@Event
- 鸿蒙Next状态管理装饰器V2 @ObservedV2@Trace@Local
- 鸿蒙开发中父子组件如何进行数据通信(状态管理v1版)?
- 鸿蒙-状态管理V2
- 鸿蒙开发:V2版本装饰器之@Monitor装饰器
- 状态管理V2
- 鸿蒙开发:刷新库V2装饰器适配
- HarmonyOS Next V2 状态管理实战