在HarmonyOS鸿蒙Next中用@Watch来订阅数据变化时,数据中每个属性变化都会导致调用这个@Watch方法

在HarmonyOS鸿蒙Next中用@Watch来订阅数据变化时,数据中每个属性变化都会导致调用这个@Watch方法 咨询描述: 当我从一个页面给子组件传递参数时,需要用到@Watch,但是当@Watch的变量里面的字段一个个重新赋值时候,会导致每次都会调用@Watch,导致多次触发,请问有什么办法能避免每次都触发调用方法吗?

咨询场景描述: 比如:

this.newsInfo.NewsType = NewsType.LIVE_TEXT_TYPE
this.newsInfo.NewsTitle = this.liveInfo.LiveTitle
this.newsInfo.NewsID = this.liveInfo.LiveID
this.newsInfo.CreateDate = this.liveInfo.CreateDate
this.newsInfo.Stocks = this.liveInfo.Stocks
this.newsInfo.NewsHot = this.liveInfo.NewsHot

这边我需要将liveInfo中的数据赋值给newsInfo,然后子组件中我会订阅newsInfo的数据变化来进行数据请求,现在会导致多次请求。 之所以用这种方法是因为newsInfo也是网络请求回来的,我需要通知子组件这个数据请求到了子组件中也可以开始请求数据。

父组件代码:

@State newsInfo: NewsEntity = new NewsEntity()

this.newsInfo.NewsType = NewsType.LIVE_TEXT_TYPE
this.newsInfo.NewsTitle = this.liveInfo.LiveTitle
this.newsInfo.NewsID = this.liveInfo.LiveID
this.newsInfo.CreateDate = this.liveInfo.CreateDate
this.newsInfo.Stocks = this.liveInfo.Stocks

传递给子组件

CommentBottomBar({ newsEntity: $newsInfo})

子组件代码:

@Link [@Watch](/user/Watch)('newsEntitySuccess')
newsEntity: NewsEntity

newsEntitySuccess() {
  request(newsEntity.NewsID)
}
3 回复

我的临时解决方案是:

// 复制临时对象
copyInfo = newsInfo.copy

// 临时对象的某些变量赋值
copyInfo.xxx = this.live.xxx

// 替换newsInfo(触发一次watch)
newsInfo = copyInfo

更多关于在HarmonyOS鸿蒙Next中用@Watch来订阅数据变化时,数据中每个属性变化都会导致调用这个@Watch方法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,@Watch装饰器用于监听数据的变化。当使用@Watch来订阅数据变化时,如果数据中的某个属性发生变化,@Watch方法会被调用。这意味着,如果数据对象包含多个属性,每个属性的变化都会触发@Watch方法的执行。

例如,假设有一个数据对象data,其中包含nameage两个属性。如果在@Watch方法中监听了data对象,那么无论是name还是age发生变化,@Watch方法都会被调用。

这种机制允许开发者在数据发生变化时执行相应的逻辑,但需要注意的是,如果数据对象的属性较多或变化频繁,可能会导致@Watch方法被频繁调用,从而影响性能。

总结:在HarmonyOS鸿蒙Next中,使用@Watch装饰器订阅数据变化时,数据对象中的每个属性变化都会触发@Watch方法的调用。

在HarmonyOS鸿蒙Next中,使用@Watch注解来订阅数据变化时,当被监视的数据对象的属性发生变化时,会触发@Watch方法。如果数据对象包含多个属性,每个属性的变化都会导致@Watch方法被调用。因此,建议在@Watch方法中通过判断具体变化的属性来执行相应的逻辑,以避免不必要的性能开销。

例如:

@Watch('dataObject')
onDataChange(newValue, oldValue, propertyName) {
    if (propertyName === 'specificProperty') {
        // 执行特定逻辑
    }
}

这样可以确保只在特定属性变化时执行相关操作,提升应用性能。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!