深入理解小程序组件的生命周期

一、小程序组件的生命周期概述

小程序组件作为页面中的一种内部元素,具有自身的生命周期。组件的生命周期由组件实例上的函数钩子控制,这些钩子提供给开发者在组件不同的生命周期中添加自定义逻辑的机会。

小程序组件可以理解为“自定义标签”,由组件的WXML、样式WXSS和逻辑JS三个文件组成。组件是由组件构造器构造出来的实例。组件构造器是使用Component()函数创建的。

小程序组件的生命周期包括创建、挂载、更新和卸载等阶段。在不同阶段,组件会触发不同的函数钩子,开发者可以在这些钩子中编写自己的代码,以达到想要的效果。

二、小程序组件的生命周期函数

1.创建阶段

小程序组件的创建阶段包括组件实例的创建和属性的初始化。组件的创建阶段包含以下生命周期函数:

1.1. created() 组件实例刚刚被创建时触发,此时组件数据绑定等不能使用,在这个周期内,我们可以给组件添加一些属性、数据等。

Component({
  created() {
    // 组件实例创建完成后
    this.setData({
      message: 'Hello World'
    })
  }
})

1.2. attached() 组件实例进入页面节点树时触发,即将插入页面时。此时可以获取父组件实例对象、节点信息等。

Component({
  attached() {
    console.log('component attached ')
  }
})

1.3. ready() 组件视图层已经构建完毕,可以获取节点信息和宽高信息等。在这个阶段,可以开发一些使用组件去获取父页面里的节点等操作。

Component({
  ready() {
    console.log('component ready')
  }
})

2.更新阶段

小程序组件的更新阶段主要是借助属性和数据的变化来触发的,触发更新会引发生命周期函数执行,此时可以调用组件的一个或多个的属性或方法进行更新,从而使得组件重新渲染。

2.1. moved() 组件节点从原位置移动到新的位置时触发。此时可以获取到移动的方向和移动的位置等信息。

Component({
  moved() {
    console.log('component moved')
  }
})

2.2. detached() 组件从页面节点树中被移除时触发。在此阶段,可以完成一些清理工作。

Component({
  detached() {
    console.log('component detached')
  }
})

三、小程序组件生命周期实例演示

下面是一个简单的小程序组件生命周期实例,以一个目录列表组件为例,演示组件生命周期函数的使用方法。

目录列表组件示例

根据需要添加wxml、js、wxss文件即可。

<!-- 目录列表组件.wxml -->
<view class="directory-list">
  <view class="directory-list__item" wx:for="{{list}}" wx:key="index" bindtap="handleTap">
    {{item.name}}
  </view>
</view>

<!-- 目录列表组件.wxss -->
.directory-list {
  background-color: #fff;
}

.directory-list__item {
  padding: 16px;
  border-bottom: 1px solid #eee;
}
.directory-list__item:last-child {
  border-bottom: none;
}

<!-- 目录列表组件.js -->
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    // 接收传递的list数据
    list: {
      type: Array,
      value: []
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    message: ''
  },

  /**
   * 组件的方法列表
   */
  methods: {
    handleTap(e) {
      this.triggerEvent('onTap', e.currentTarget.dataset.index)
    },

    /**
     * 组件实例刚刚被创建时触发
     */
    created() {
      console.log('component created')
    },

    /**
     * 组件实例进入页面节点树时触发,即将插入页面时
     */
    attached() {
      console.log('component attached')
    },

    /**
     * 组件视图层已经构建完毕,可以获取节点信息和宽高信息等
     */
    ready() {
      console.log('component ready')
    },

    /**
     * 组件实例从页面中移除时触发
     */
    detached() {
      console.log('component detached')
    }
  }
})

使用目录列表组件

在页面中引用目录列表组件,并给组件传递数据。在组件的生命周期函数中添加自定义代码。

<!-- canvas.wxml -->
<navigator class="page-navigation" url="../index/index"></navigator>

<view class="canvas">
  <!-- 引用目录列表组件 -->
  <directory-list 
    class="directory-list" 
    list="{{catalogList}}" 
    onTap="handleTap"
  />
  <canvas class="canvas-chart" type="2d" id="myCanvas" canvas-id="myCanvas" bindtouchstart="bindingtap" />
</view>

<!-- canvas.wxss -->
.canvas-chart {
  height: 240px;
  width: 100%;
  background-color: #f5f5f5;
}

.directory-list {
  margin-top: 10px;
}

<!-- canvas.js -->
const app = getApp()

Page({
  data: {
    canvasWidth: 0,
    canvasHeight: 0,
    catalogList: [
      { id: '1', name: '绘制矩形' },
      { id: '2', name: '绘制圆形' },
      { id: '3', name: '绘制文本' }
    ]
  },

  onLoad() {
    this.setCanvasSize()
  },

  handleTap: function (event) {
    // 预留回调事件 - 点击事件
  },

  bindingtap() {
    // 预留回调事件 - 滑动事件
  },

  setCanvasSize: function () {
    const that = this
    wx.getSystemInfo({
      success: function (res) {
        that.setData({
          canvasWidth: res.windowWidth,
          canvasHeight: res.windowHeight - 80
        })
      },
    })
  }
})

结语

小程序组件的生命周期在小程序开发中占据了很重要的地位,非常值得开发者去了解、掌握。熟练掌握小程序组件的生命周期,可以帮助我们更好地构建组件化、易维护的小程序应用。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/306237.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2025-01-02 12:00
下一篇 2025-01-02 12:00

相关推荐

  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • Python程序文件的拓展

    Python是一门功能丰富、易于学习、可读性高的编程语言。Python程序文件通常以.py为文件拓展名,被广泛应用于各种领域,包括Web开发、机器学习、科学计算等。为了更好地发挥P…

    编程 2025-04-29
  • Python购物车程序

    Python购物车程序是一款基于Python编程语言开发的程序,可以实现购物车的相关功能,包括商品的添加、购买、删除、统计等。 一、添加商品 添加商品是购物车程序的基础功能之一,用…

    编程 2025-04-29
  • 爬虫是一种程序

    爬虫是一种程序,用于自动获取互联网上的信息。本文将从如下多个方面对爬虫的意义、运行方式、应用场景和技术要点等进行详细的阐述。 一、爬虫的意义 1、获取信息:爬虫可以自动获取互联网上…

    编程 2025-04-29
  • Vb运行程序的三种方法

    VB是一种非常实用的编程工具,它可以被用于开发各种不同的应用程序,从简单的计算器到更复杂的商业软件。在VB中,有许多不同的方法可以运行程序,包括编译器、发布程序以及命令行。在本文中…

    编程 2025-04-29
  • Python一元二次方程求解程序

    本文将详细阐述Python一元二次方程求解程序的相关知识,为读者提供全面的程序设计思路和操作方法。 一、方程求解 首先,我们需要了解一元二次方程的求解方法。一元二次方程可以写作: …

    编程 2025-04-29
  • 如何使用GPU加速运行Python程序——以CSDN为中心

    GPU的强大性能是众所周知的。而随着深度学习和机器学习的发展,越来越多的Python开发者将GPU应用于深度学习模型的训练过程中,提高了模型训练效率。在本文中,我们将介绍如何使用G…

    编程 2025-04-29
  • Web程序和桌面程序的区别

    Web程序和桌面程序都是进行软件开发的方式,但是它们之间存在很大的区别。本文将从多角度进行阐述。 一、运行方式 Web程序运行于互联网上,用户可以通过使用浏览器来访问它。而桌面程序…

    编程 2025-04-29
  • 改善Python程序的90个建议pdf网盘

    本文将从多个方面对改善Python程序的90个建议pdf网盘进行详细阐述,帮助Python开发者提高程序的性能和效率。 一、代码优化 1、使用map函数或列表推导式代替for循环。…

    编程 2025-04-29

发表回复

登录后才能评论