HarmonyOS鸿蒙Next中【快应用】销毁自定义组件,避免组件事件被多次触发

HarmonyOS鸿蒙Next中【快应用】销毁自定义组件,避免组件事件被多次触发 【现象描述】

销毁自定义组件时,会多次触发自定义组件的事件

【问题分析】

自定义组件的上层组件上有if的话,值变成false,自定义组件都没有被销毁, 导致自定义组件里的事件都可以被触发

【解决方案】

销毁自定义组件时,if不要写在自定义组件的父节点上,写在自定义组件上

【代码如下】

Hello.ux

<import name="demo-view" src="./demoView/index.ux"></import>
<template>  
  <!-- template里只能有一个根节点 -->  
  <div class="container">
    <div class="item-container">
      <div >
        <demo-view if="{{loadNewView}}" click-times="{{clickTimes}}"></demo-view>
      </div>
      <text class="btn" onclick="addClickTimes">点我</text>
      <text class="btn" onclick="reloadDemoView">刷新组件</text>
    </div>
  </div>
</template>
<script>
  export default {
    private: {
      isShowTab: true,
      loadNewView: true,
      clickTimes: 0
    },
    onInit() { },
    addClickTimes() {
      this.clickTimes++
    },
    reloadDemoView() {
      console.log("刷新组件========>开始")
      this.loadNewView = false
      setTimeout(() => {
        console.log("刷新组件========>结束")
        this.loadNewView = true
      }, 50)
    }
  }
</script>
<style>
  .container {
    flex: 1;
    flex-direction: column;
  }
  .btn {
    height: 80px;
    text-align: center;
    border-radius: 5px;
    margin-top: 60px;
    margin-right: 60px;
    margin-left: 60px;
    color: #ffffff;
    font-size: 30px;
    background-color: #0faeff;
  }
  .item-container {
    margin-top: 250px;
    margin-right: 60px;
    margin-left: 60px;
    flex-direction: column;
  }
</style>

DemoView:

<template>    
  <div>
    <text style="color:red;font-size: 50px">组件{{clickTimes}}</text>
  </div>
</template>
<script>
export default {
  props: {
    clickTimes:{
      type:Number,
      default:0
    }
  },
  onInit() {
    this.$watch('clickTimes','fatherViewClick')
  },
  fatherViewClick(nVal,Oval){
    console.log("组件监听打印========>",nVal)
  }
}
</script>

更多关于HarmonyOS鸿蒙Next中【快应用】销毁自定义组件,避免组件事件被多次触发的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS鸿蒙Next中,销毁自定义组件以避免组件事件被多次触发,可以通过以下方式实现:

  1. 使用onDestroy生命周期回调:在自定义组件中,onDestroy是组件销毁时的回调函数。可以在此函数中清理事件监听器或其他资源,确保组件销毁时不会继续触发事件。

  2. 手动移除事件监听器:在组件销毁前,手动移除所有绑定的事件监听器。可以通过off方法取消事件监听,防止事件被多次触发。

  3. 使用Componentdestroy方法:直接调用组件的destroy方法,强制销毁组件。该方法会触发onDestroy回调,并清理组件相关的资源。

  4. 避免重复创建组件:在组件创建时,确保不会重复创建相同的组件实例。可以通过条件判断或状态管理来避免组件的重复创建和销毁。

  5. 使用PageonPageHide回调:如果组件与页面生命周期相关,可以在onPageHide回调中销毁组件,确保页面隐藏时组件被正确销毁。

通过以上方法,可以有效避免自定义组件在销毁后事件被多次触发的问题。

更多关于HarmonyOS鸿蒙Next中【快应用】销毁自定义组件,避免组件事件被多次触发的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,销毁自定义组件并避免组件事件被多次触发,可以通过以下步骤实现:

  1. 组件销毁:在组件的onDestroy生命周期方法中,手动移除事件监听器或清理资源,确保组件销毁时不会遗留事件监听。

  2. 事件解绑:在组件中使用off方法解绑事件,防止事件被多次绑定。例如,使用this.off('eventName', callback)来移除特定事件监听器。

  3. 单例模式:确保组件实例是单例的,避免多次创建相同组件导致事件重复触发。

  4. 状态管理:使用全局状态管理工具(如@ohos/data)来管理组件状态,确保组件销毁时状态同步清理。

通过这些方法,可以有效避免组件事件被多次触发,确保应用性能稳定。

回到顶部