小程序 自定义组件 lifetime attached()函数的坑

在微信小程序开发中,直接在自定义组件的attached生命周期函数内调用setData可能会导致该函数被触发两次,首次执行时数据可能未准备好,引发错误。解决方案是将数据初始化放在组件外部完成,或者使用WXS进行数据初始化。这样的问题可能导致‘isnotafunction’或‘Cannotreadproperty’xxx‘ofnull’等错误,影响调试体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接说结论:不要在自定义组件的attached函数中调用 setData函数改变组件的数据。否则会出现超级烦的问题。

问题经过:写了一个小程序,用到了两个组件,2号组件中调用了1号组件,然后代码跑起来没问题,结果一看Console直接人傻了,全是报错,而且是 'xxx' is not a function , Cannot read property 'xxx' of null 这种问题,但是程序已经跑起来了,各项功能都没问题,前前后后找了两天。最后找到一篇文章才发现:

        如果在自定义组件的attached函数中调用 setData函数改变组件的数据,会使attached函数调用两次,还会让第一次调用时拿不到传入组件的数据:

 如图,我在自定义组件里用到了this.setData,并且使用了三次console.log函数,然后点击编译,在console里面信息如下:

 可以看到,1 attached start!与 answer= 出现了两遍,1 attached end!却只有一次,而且answer=在第一次的值是null,在第二次就有值了。并且在两次 1 attached start!之间出现了报错信息(组件调用一多,看起来就很烦)。

解决思路:1.不要在自定义组件的attached函数中调用 setData函数,所有初始数据在组件外部完成初始化再传进组件中。2.<wxs 在wxml界面调用函数完成数据初始化

想要更了解这个问题可以点下面这个链接:

微信小程序组件生命周期的坑 - 掘金 (juejin.cn)

第二个方法可以参考如下链接:

 WXS | 微信开放文档 (qq.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值