iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >微信小程序组件的生命周期有哪些
  • 301
分享到

微信小程序组件的生命周期有哪些

2023-06-06 16:06:08 301人浏览 安东尼
摘要

微信小程序组件的生命周期有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。组件 attached 生命周期执行次数按照通常的理解,除moved/show/hi

微信小程序组件的生命周期有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

组件 attached 生命周期执行次数

按照通常的理解,除moved/show/hide等生命周期可能多次执行外,

严格意义上与组件加载相关的生命周期,如:created、attached、ready等,每个组件实例应该只执行一次。但是事实真的如此吗?

背景

这个问题的发现,源于我们在小程序的报错日志中,

收到大量类似Cannot redefine property: isComponent的报错。

微信小程序组件的生命周期有哪些

原因分析

通过变量名可以追溯到我们在代码中的定义方式为:

Component({ lifetimes: { attached() { Object.defineProperty(this, 'isComponent', { enumerable: true, get() { return true }, }); }, },});

很容易理解,这种错误的起因在于试图给对象重新定义一个不可配置的属性,

具体可以查看MDN上的说明。

可是这个定义是写在attached生命周期当中的,难道说,组件的attached生命周期被触发了两次?

天呐,这怎么可能?

是的,就是这么神奇!

场景还原

该问题并不容易复现,但是通过不断删繁就简、抽丝剥茧,最终还是找到了问题的根源:

在页面onLoad之前,通过setData改变状态触发子组件渲染,该子组件的attached生命周期会被触发两次。

微信小程序组件的生命周期有哪些

可以通过以下代码复现该场景,或者直接访问小程序代码片段。

页面

// page.jsPage({ data: { showChild2: false, }, onChild1Attached() { this.setData({ showChild2: true }); },});
<!-- page.wxml --><child1 bind:attached="onChild1Attached"></child1><child2 wx:if="{{ showChild2 }}"></child2>

子组件1

与页面一同渲染,并在attached的时候,通过triggerEvent,通知页面更新状态并渲染子组件2。

// child1.jsComponent({ lifetimes: { attached() { this.triggerEvent('attached'); }, },});
<!-- child1.wxml --><view>child1</view>

子组件2

执行了两次attached生命周期,导致报错。

// child2.jsComponent({ lifetimes: { attached() { Object.defineProperty(this, 'isComponent', { enumerable: true, get() { return true }, }); }, },});
<!-- child2.wxml --><view>child2</view>

组件 ready 生命周期的执行时机

小程序官方文档没有明确给出组件生命周期的执行顺序,不过通过打印日志我们可以很容易地发现:

  • 在加载阶段,会依次执行:created -> attached -> ready

  • 在卸载阶段,会依次执行:detached

所以,看起来这个顺序貌似应该是:created -> attached -> ready -> detached。

但是实际情况果真如此吗?

背景

有段时间,客服经常反馈,我们的小程序存在串数据的现象。

例如:A商家的直播展示了B商家的商品。

原因分析

串数据发生在多个场景,考虑到数据是通过消息推送到小程序端上的,最终怀疑问题出在websocket通信上。

在小程序端,我们封装了一个WEBSocket通信组件,核心逻辑如下:

// socket.jsComponent({ lifetimes: { ready() { this.getSocketConfig().then(config => { this.ws = wx.connectSocket(config); this.ws.onMessage(msg => { const data = JSON.parse(msg.data); this.onReceiveMessage(data); }); }); }, detached() { this.ws && this.ws.close({}); }, }, methods: { getSocketConfig() { // 从服务器请求 socket 连接配置 return new Promise(() => {}); }, onReceiveMessage(data) { event.emit('message', data); }, },});

简单说,就是在组件ready时,初始化一个WebSocket连接并监听消息推送,然后在detached阶段关闭连接。

看起来并没有什么问题,那么就只能从结果倒推可能不符合常理的情况了。

数据串了 -> WebSocket 消息串了 -> WebSocket 没有正常关闭 -> close有问题/detached未执行/ready在detached之后执行

场景还原

此处的实际业务逻辑较为复杂,因此只能通过简化的代码来验证。

通过不断试验,最终发现:

组件的 ready 与 detached 执行顺序并没有明确的先后关系。

微信小程序组件的生命周期有哪些

可以通过以下代码复现该场景,或者直接访问小程序代码片段。

页面

// page.jsPage({ data: { showChild: true, }, onLoad() { this.setData({ showChild: false }); },});
<!-- page.wxml --><child wx:if="{{ showChild }}" />

组件

组件未ready的时候销毁组件,会先同步执行detached,然后异步执行ready。

// child.jsComponent({ lifetimes: { created() { console.log('created'); }, attached() { console.log('attached'); }, ready() { console.log('ready'); }, detached() { console.log('detached'); } },});

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: 微信小程序组件的生命周期有哪些

本文链接: https://www.lsjlt.com/news/247978.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 微信小程序组件的生命周期有哪些
    微信小程序组件的生命周期有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。组件 attached 生命周期执行次数按照通常的理解,除moved/show/hi...
    99+
    2023-06-06
  • 小程序中的生命周期有哪些?
    一、小程序中生命周期的分类 小程序中的生命周期有以下三种: (1)应用生命周期 小程序的生命周期函数是在app.js中调用,通过App(Object)函数用来注册一个小程序,指定其小程序的生命周期回调 (2)页面生命周期 页面生命...
    99+
    2023-09-02
    小程序 微信小程序 前端 前端框架 开发语言
  • 微信小程序开发中组件的生命周期详细介绍
    目录组件的生命周期自定义组件的生命周期函数执行顺序组件常用的生命周期函数lifetimes节点组件所在页面的生命周期函数pageLifetimes节点组件的生命周期 组件的生命周期,...
    99+
    2024-04-02
  • 微信小程序中的生命周期与生命周期函数浅析介绍
    目录一、生命周期概念分类二、生命周期函数概念作用分类三、总结一、生命周期 概念 生命周期(Life Cycle)是指一个对象从创建-->运行-->销毁的整个阶段 小程序的...
    99+
    2022-11-13
    微信小程序生命周期 微信小程序生命周期函数
  • 微信小程序显示loading效果,微信小程序节流效果,微信小程序生命周期,微信小程序组件的创建与使用
    一、显示loading效果         文档地址:wx.showLoading(Object object) | 微信开放文档         请求前 显示loading 效果,请求结束后隐藏loading // 在请求模块中wx.sh...
    99+
    2023-09-14
    微信小程序 小程序 微信
  • vue组件生有哪些命周期
    本篇文章给大家分享的是有关vue组件生有哪些命周期,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。具体内容如下分为4个阶段:create/mou...
    99+
    2024-04-02
  • Angular组件的生命周期有哪些
    这期内容当中小编将会给大家带来有关Angular组件的生命周期有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。概述组件声明周期以及angular的变化发现机制红色方法只执行一次。变更检测执行的绿色方法...
    99+
    2023-06-15
  • ASP.NET组件的生命周期有哪些
    本篇文章给大家分享的是有关ASP.NET组件的生命周期有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 Instance 实例化通过控件的构造器所实例化。还可以通过被父控件...
    99+
    2023-06-18
  • 小程序中有哪些生命周期函数
    这篇文章给大家分享的是有关小程序中有哪些生命周期函数的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。导语:最近刚接触到小程序,在测试时发现退出小程序后小程序中的数据并没有得到释放,因此当我再次打开小数据时,数据并没...
    99+
    2023-06-06
  • 微信小程序生命周期函数是什么
    本篇内容主要讲解“微信小程序生命周期函数是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“微信小程序生命周期函数是什么”吧!由于小程序的数据在我们退出小程序时并没有得到释放,因此再次点击开来数...
    99+
    2023-06-26
  • 微信小程序App生命周期的示例分析
    小编给大家分享一下微信小程序App生命周期的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!微信小程序App生命周期:on...
    99+
    2024-04-02
  • 怎么理解微信小程序中的生命周期
    本篇内容主要讲解“怎么理解微信小程序中的生命周期”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解微信小程序中的生命周期”吧!一、生命周期1. 什么是生命周期?生命周期 (Life Cycl...
    99+
    2023-06-25
  • 小程序生命周期
    小程序的生命周期说白了就是指程序从创建、到开始、暂停、唤起、停止、卸载的过程。 我们大概从三个角度看一下小程序的生命周期。 (1):应用生命周期 (2):页面生命周期 (3):组件生命周期 应用生命周期 用户首次打开小程序,触发 o...
    99+
    2023-09-02
    前端 微信小程序 javascript
  • 微信小程序页面生命周期的示例分析
    小编给大家分享一下微信小程序页面生命周期的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体如下页面生命周期函数onLo...
    99+
    2024-04-02
  • 详解微信小程序应用和页面生命周期
    目录什么是生命周期生命周期的分类小程序的页面生命周期函数什么是生命周期 生命周期(Life Cycle)是指一个对象从创建→>运行>销毁的整个阶段,强调的是一个...
    99+
    2022-11-13
    小程序应用 微信小程序页面生命周期
  • 微信小程序开发中源码分析生命周期
    这篇文章主要介绍了微信小程序开发中源码分析生命周期的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序开发中源码分析生命周期文章都会有所收获,下面我们一起来看看吧。生命周期的概念在讲微信小程序生命周期之前,...
    99+
    2023-07-05
  • 微信小程序中生命周期函数的示例分析
    这篇文章主要介绍微信小程序中生命周期函数的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!微信小程序 生命周期函数小程序中 判断当前首页是从其他页面返回,还是由入口打开由于小程...
    99+
    2024-04-02
  • 微信小程序开发中生命周期的详细介绍
    目录前言生命周期的概念微信小程序生命周期一、应用级生命周期二、页面级生命周期三、组件的生命周期四、小结最后前言 在微信小程序开发中,关于微信小程序API的使用是必备技能,但是关于微信...
    99+
    2023-05-13
    微信小程序生命周期 小程序生命周期函数
  • Activity的生命周期有哪些
    这期内容当中小编将会给大家带来有关Activity的生命周期有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Android中Activity的生命周期,网上大多数文章基本都是直接贴图、翻译API,比较...
    99+
    2023-05-31
    activity ct
  • php的生命周期有哪些
    这期内容当中小编将会给大家带来有关php的生命周期有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。php有什么用php是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法混合了C、Java、Per...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作