HarmonyOS 为什么@Link的属性变更不会触发UI刷新?
子组件@Link content,定义BuilderParams buildContent(),并在build里调用。
父组件@State content,buildContent的实现,赋给子组件。
//这个是子组件。
@Component
export struct BaseDialog {
@Link title?:string | Resource
@Link content?:string | Resource//TODO 这里是关键
@Link buttons?:ButtonParams[]
refreshContent(content?:string | Resource) {
Logger.debug(TAG, "refreshContent(" + content + ") old=" + this.content)
this.content = content
}
@BuilderParam buildContent:($$:BaseDialog, content?:string | Resource)=>void
build() {
Column() {
this.buildContent(this, this.content)//TODO 这里是关键,为什么这里加了content,content变化为什么不会重新触发buildContent
)
}
}
}
//这是父组件。
@CustomDialog
export struct SendEmailDialog {
controller: CustomDialogController
@State title?: string|Resource = $r('app.string.send_email_title')
@State content?: string = ""//TODO 这里是关键
@State buttons?: ButtonParams[] = []
@State email?:string = ""
build() {
BaseDialog({
title:this.title,
content:this.content,
buildContent: overrideBuildContent,
buttons:this.buttons
})
}
}
这是父组件文件中的一个builder函数(并不在父组件的struct里,在文件头部定义)。
@Builder
function createDocTypeText($$:BaseDialog, text:string, selected:boolean, docType:string) {
Text(text)
.fontSize(18)
.fontWeight(FontWeight.Normal)
.fontColor(selected? $r('app.color.tag_selected') : $r('app.color.tag_unselected'))
.textAlign(TextAlign.Start)
.height($r('app.float.spacing_24'))
.borderColor(selected? $r('app.color.tag_selected') : $r('app.color.tag_unselected'))
.borderWidth(1)
.borderRadius(4)
.margin({right:$r("app.float.spacing_6")})
.padding({left:$r("app.float.spacing_8"), right:$r("app.float.spacing_8"), top:0, bottom:0})
.onClick((event)=>{
let params = SendEmailDialog.parse($$.content as string)
if (params) {
params.docType = docType
$$.refreshContent(SendEmailDialog.stringify(params))//TODO 这里是关键,更改了content为什么不会触发更新?
Logger.debug(TAG, "DocTypeText.onClick() result:" + $$.content)
}
})
}
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS 关于对象数组内容变更不会引起UI刷新
600浏览 • 0回复 待解决
UI预览不会自动刷新, 且刷新较慢
1107浏览 • 1回复 待解决
HarmonyOS flutter业务变更不被主项目托管
112浏览 • 1回复 待解决
为什么自定义组件声明 @Link @Prop 的属性必须外层配置呢?
451浏览 • 1回复 待解决
HarmonyOS @State修饰@observed装饰的对象, 对象里的数组改变, 不会触发ui刷新
317浏览 • 1回复 待解决
数组中元素变更如何触发刷新list?
500浏览 • 1回复 待解决
HarmonyOS 为什么通过JSON.parse或axios网络请求的数据修改属性值UI不刷新
378浏览 • 1回复 待解决
键盘移动焦点对象按下enter,为什么不会触发点击事件
2173浏览 • 1回复 待解决
@State属性变更触发UI渲染的方式,一般会附带对于某些属性变量的信号监听,但是HarmonyOS未提供此功能API
422浏览 • 1回复 待解决
HarmonyOS @State修饰的ResourceStr内容在变更的时候较大几率不会响应UI的变换
162浏览 • 1回复 待解决
HarmonyOS Observe的变量更新了,但是不会触发UI更新
986浏览 • 1回复 待解决
嵌套Class的属性变化无法触发UI渲染
582浏览 • 1回复 待解决
#鸿蒙学习大百科#嵌套类中的属性如何才能具有触发UI刷新的能力?
421浏览 • 1回复 待解决
#鸿蒙学习大百科#在继承类中,如何才能使属性的变化触发UI刷新?
419浏览 • 1回复 待解决
uiextension为什么不会避让顶部状态栏
1080浏览 • 1回复 待解决
HarmonyOS 为什么连续调用readDescriptorValue时,第二次调用不会触发callback?
371浏览 • 1回复 待解决
HarmonyOS 非UI类中改变State装饰属性,无法触发UI渲染
463浏览 • 1回复 待解决
HarmonyOS 复杂数据类型变更,UI不刷新,该如何解决?
156浏览 • 1回复 待解决
为什么ArkTS禁止在运行时变更对象布局?
792浏览 • 1回复 待解决
HarmonyOS 懒加载列表更改属性UI不刷新
246浏览 • 1回复 待解决
HarmonyOS 在@builder中使用引用传递无法触发UI刷新
138浏览 • 1回复 待解决
如何实现Class单个属性改变 自动触发页面刷新
1110浏览 • 1回复 待解决
HarmonyOS 下面demo为什么点击不刷新?
532浏览 • 1回复 待解决
HarmonyOS buildMode为debug为什么不会被混淆
680浏览 • 1回复 待解决
HarmonyOS ObjectLink修饰符对象的属性改变不能引起UI刷新
725浏览 • 1回复 待解决
@Builder按引用传递参数时,传递的参数可为状态变量,且状态变量的改变会引起@Builder方法内的UI刷新,您这边的demo进行的是值传递,因此不会引起UI的更新。参数传递规则:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-builder-V5#ZH-CN_TOPIC_0000001893210149__参数传递规则