HarmonyOS 鸿蒙Next @State赋相同值的时候,会引起组件的重新渲染吗?

发布于 1周前 作者 itying888 来自 鸿蒙OS

HarmonyOS 鸿蒙Next @State赋相同值的时候,会引起组件的重新渲染吗?

当第1次点击button时,Text组件会被重新渲染。当第2次点击button时,值与现在的值相同,此时会引起组件的重新渲染吗?
 

2 回复

可以通过createComponentObserver来监听组件有没有刷新,可以通过@Watch可以监听@State修饰的变量是否变化,通过以下代码可以验证,值相同时不会引起组件重新渲染:

import { inspector } from '[@kit](/user/kit).ArkUI';

[@Entry](/user/Entry)

[@Component](/user/Component)

struct Index {

  [@State](/user/State) [@Watch](/user/Watch)('onChange') msg: string = 'hello'

  onChange() {

    console.log('刷新')

  }

  aboutToAppear(): void {

    const abserver = inspector.createComponentObserver('msg')

    abserver.on('layout',() => {

      console.log('布局')

    })

    abserver.on('draw',() => {

      console.log('绘制')

    })

  }

  build() {

    Column() {

      Text(this.msg).id('msg')

      Button('点击').onClick(() => {

          this.msg = '12345'

      })

    }

  }

}

更多关于HarmonyOS 鸿蒙Next @State赋相同值的时候,会引起组件的重新渲染吗?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙开发中,当使用@State注解的变量被赋予相同的值时,通常不会引起组件的重新渲染。HarmonyOS的响应式机制是基于数据变化来驱动视图更新的,如果@State变量的值没有实际改变(即内存地址未变且值相等),则框架会判定为无变化,从而避免不必要的渲染。

具体来说,HarmonyOS的UI框架会对比新旧状态,如果发现@State变量的引用(内存地址)未改变,且值相等(对于基本数据类型直接比较值,对于复杂对象则可能依赖其equals方法或类似机制),则视为状态未改变,不会触发组件的重新构建和渲染流程。

这种机制有助于提升应用性能,避免因为无效的状态更新而导致的资源浪费。因此,在编写HarmonyOS应用时,开发者可以依赖这一特性来优化应用的性能,确保只有在状态真正改变时才进行渲染。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部