直接说结论:不要在自定义组件的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)
第二个方法可以参考如下链接: