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
待解决
相关问题
UI预览不会自动刷新, 且刷新较慢
656浏览 • 1回复 待解决
数组中元素变更如何触发刷新list?
394浏览 • 1回复 待解决
为什么自定义组件声明 @Link @Prop 的属性必须外层配置呢?
346浏览 • 1回复 待解决
键盘移动焦点对象按下enter,为什么不会触发点击事件
1911浏览 • 1回复 待解决
HarmonyOS Observe的变量更新了,但是不会触发UI更新
741浏览 • 1回复 待解决
@State属性变更触发UI渲染的方式,一般会附带对于某些属性变量的信号监听,但是HarmonyOS未提供此功能API
313浏览 • 1回复 待解决
嵌套Class的属性变化无法触发UI渲染
307浏览 • 1回复 待解决
#鸿蒙学习大百科#嵌套类中的属性如何才能具有触发UI刷新的能力?
205浏览 • 1回复 待解决
HarmonyOS 非UI类中改变State装饰属性,无法触发UI渲染
36浏览 • 1回复 待解决
#鸿蒙学习大百科#在继承类中,如何才能使属性的变化触发UI刷新?
206浏览 • 1回复 待解决
HarmonyOS buildMode为debug为什么不会被混淆
481浏览 • 1回复 待解决
uiextension为什么不会避让顶部状态栏
791浏览 • 1回复 待解决
HarmonyOS 下面demo为什么点击不刷新?
332浏览 • 1回复 待解决
为什么ArkTS禁止在运行时变更对象布局?
472浏览 • 1回复 待解决
如何实现Class单个属性改变 自动触发页面刷新
809浏览 • 1回复 待解决
HarmonyOS ObjectLink修饰符对象的属性改变不能引起UI刷新
492浏览 • 1回复 待解决
HarmonyOS中使用async为什么不会阻塞主线程?
157浏览 • 0回复 待解决
HarmonyOS 自定义builder方法, 参数是按引用传递, 当状态值修改时, 不触发builder方法, 不会刷新UI
495浏览 • 1回复 待解决
HarmonyOS 如何让自定义类中的属性变化引起UI刷新?
444浏览 • 1回复 待解决
Array内容监听问题,点击某个按钮,对VM中的数组执行push操作,不会触发监听,但是变更其他值就能触发监听
447浏览 • 1回复 待解决
HarmonyOS Array 成员变量属性更改,状态不同步、未能刷新UI
598浏览 • 1回复 待解决
HarmonyOS 如何触发更新自定义组件里的数据并让其刷新UI?
933浏览 • 1回复 待解决
为什么业务 Pod 被删除,数据也不会丢失?
3881浏览 • 1回复 待解决
HarmonyOS 点击list的item,修改当前item的属性状态值List根据属性值变化刷新UI
66浏览 • 1回复 待解决
@State装饰嵌套结构的变量时,为什么嵌套结构中数组元素增加或减少时界面不会刷新
2683浏览 • 1回复 待解决
@Builder按引用传递参数时,传递的参数可为状态变量,且状态变量的改变会引起@Builder方法内的UI刷新,您这边的demo进行的是值传递,因此不会引起UI的更新。参数传递规则:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-builder-V5#ZH-CN_TOPIC_0000001893210149__参数传递规则