当前位置: 首页 > wzjs >正文

毕业论文代做网站是真的吗游戏推广引流软件

毕业论文代做网站是真的吗,游戏推广引流软件,网站设计联盟,五金件外发加工网1、概 述 在ArkUI中,有的朋友应该接触过Builder和LocalBuilder。其中有了LocalBuilder的存在,是为了解决组件的父子关系和状态管理的父子关系保持一致的问题。 这里面最直观的表现则是this的指向问题与组件刷新问题,本文对Builder与LocalBu…

1、概 述

在ArkUI中,有的朋友应该接触过@Builder和@LocalBuilder。其中有了@LocalBuilder的存在,是为了解决组件的父子关系和状态管理的父子关系保持一致的问题。

这里面最直观的表现则是this的指向问题与组件刷新问题,本文对@Builder与@LocalBuilder的这两个问题做简单讨论。

2、引入问题

2.1. this指向问题

有下面一段代码:

class CounterInfo {  count: number = 0;}@Builderfunction defaultBuilder() {}@Entry@Componentstruct Parent {  label: string = 'parent';  @State CounterInfo: CounterInfo = { count: 0 };  @Builder  componentBuilder($$: CounterInfo) {    Text(`${'this指向: ' + this.label}`);    Text(`${'count参数: ' + $$.count}`).margin(10);  }  build() {    Column() {      Child({ contentBuilder: this.componentBuilder });    }  }}@Componentstruct Child {  label: string = 'child';  @BuilderParam contentBuilder: ((CounterInfo: CounterInfo) => void) = defaultBuilder;  @State CounterInfo: CounterInfo = { count: 2 };  build() {    Column() {      this.contentBuilder({ count: this.CounterInfo.count });      Text("本地count: " + this.CounterInfo.count)      Button("count递增 ").onClick(() => {        this.CounterInfo.count += 1;      }).margin(10)    }.width('100%')  }}

界面效果如下(此时停留一下,想想为什么):

图片

接下来,我们将上述代码中的13行,@Builder改为@LocalBuilder,代码将变成如下:​​​​​​​

class CounterInfo {  count: number = 0;}@Builderfunction defaultBuilder() {}@Entry@Componentstruct Parent {  label: string = 'parent';  @State CounterInfo: CounterInfo = { count: 0 };  @LocalBuilder  componentBuilder($$: CounterInfo) {    Text(`${'this指向: ' + this.label}`);    Text(`${'count参数: ' + $$.count}`).margin(10);  }  build() {    Column() {      Child({ contentBuilder: this.componentBuilder });    }  }}@Componentstruct Child {  label: string = 'child';  @BuilderParam contentBuilder: ((CounterInfo: CounterInfo) => void) = defaultBuilder;  @State CounterInfo: CounterInfo = { count: 2 };  build() {    Column() {      this.contentBuilder({ count: this.CounterInfo.count });      Text("本地count: " + this.CounterInfo.count)      Button("count递增 ").onClick(() => {        this.CounterInfo.count += 1;      }).margin(10)    }.width('100%')  }}

显示效果将是如何呢?停下来稍微想想。

实际效果如下:

图片

可以看到,我们将@Builder改为@LocalBuilder后,this.label取到的值发生了变化,从原来的child变为了parent,我们可以得到第一个结论:

@LocalBuilder修饰的方法,可以保证该方法的this永远指向最初创建的那个组件实例(在本例子中为parent)

另外,由于count参数和本地count都是2,由于这两个组件不在@LocalBuilder修饰的方法中,因此,this指向的是当前渲染的组件,即 child

2.2. 组件刷新问题

👉🏻 @Builder装饰器

继续上述例子,当我们13行的代码装饰器为@Builder时,点击【count递增】按钮的效果如下:

图片

可以看到,count参数和本地count都发生了刷新。

👉🏻 @LocalBuilder装饰器

此时,我们如果将13行的装饰器改为@LocalBuilder时,点击【count递增】按钮的效果如下:

图片

可以看到,只有本地count发生了刷新,而count参数并没有发生刷新。

❓ 为什么@LocalBuilder装饰器后的count参数不刷新呢?

原因是:@Localbuilder装饰的函数绑定在父组件上,状态变量刷新机制是刷新本组件以及其子组件,对父组件无影响,所以无法引发刷新。而若使用@Builder修饰则可引发刷新,原因是@Builder改变了函数的this指向,此时函数被绑定到子组件上,故能引发UI刷新。

3、总 结

@LocalBuilder与@Builder之处在于:

  1. @LocalBuilder可以保证this永远指向创建该函数的组件,this不会因为传递而发生变化。

  2. 由于状态变量的刷新机制为刷新本组件以及其子组件,因此,当@LocalBuilder被传递到子组件时,由于this指向了父组件,因此,引入入参不会引起组件的刷新。

http://www.dtcms.com/wzjs/238032.html

相关文章:

  • 大连企业需要做网站上海seo服务外包公司
  • 禅城网站建设代理淄博信息港聊天室网址
  • 湖南seo网站多少钱百度搜索引擎的使用方法
  • 西安网站工作室抖音seo查询工具
  • 分类目录网站怎么做巨量引擎
  • 朱腾鹏个人网站seo的基本步骤
  • 常州中环互联网网站建设友情链接也称为
  • 苏州公司网站建设公司排超最新积分榜
  • 自己做一个网站一年的费用seo网站内部优化
  • 栖霞建设网站怎么优化网站排名才能起来
  • 网站建设活动策划seo岗位工作内容
  • 中江移动网站建设举一个网络营销的例子
  • 深圳网站建设 设计卓越下载百度app最新版
  • 昆明网站建站推广南京seo招聘
  • 网页制作教程考拉广州百度seo 网站推广
  • 北京做建筑信息的网站长沙正规关键词优化价格从优
  • 泰州哪家做网站建设比较好大量微信群推广代发广告
  • 手机网站素材营销策划书格式及范文
  • 买域名之后怎样做网站开鲁网站seo站长工具
  • 英文网站模板 查看百度导航2023年最新版
  • 深圳企业网站建设公司seo工资
  • 邯郸市环保局网站建设项目环境泰安做百度推广的公司
  • 长春专业做网站的公司游戏特效培训机构排名
  • 1万流量网站 服务器配置营销必备十大软件
  • 软件工程哪个学校最好网站seo置顶 乐云践新专家
  • 筑巢网站西安疫情最新消息
  • 网站备案是怎么回事seo网站优化公司
  • 云南域名注册网站建设广州品牌营销服务
  • 网站增加栏目费用4p营销理论
  • 做付费视频网站百度指数查询官方网