微信小程序组件生命周期踩坑记录有哪些常见问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1415个文字,预计阅读时间需要6分钟。
组件生命周期,通常是我们业务逻辑开始的地方。如果业务场景比较复杂,组件生命周期有不符预期的表现时,可能会引发一些业务bug,它们极难复现和修复。组件 attached
组件生命周期,通常是我们业务逻辑开始的地方。
如果业务场景比较复杂,组件生命周期有不符合预期的表现时,
可能会导致一些诡异的业务bug,它们极难复现和修复。
组件 attached 生命周期执行次数
按照通常的理解,除moved/show/hide等生命周期可能多次执行外,
严格意义上与组件加载相关的生命周期,如:created、attached、ready等,每个组件实例应该只执行一次。但是事实真的如此吗?
背景
这个问题的发现,源于我们在小程序的报错日志中,
收到大量类似Cannot redefine property: isComponent的报错。
原因分析
通过变量名可以追溯到我们在代码中的定义方式为:
Component({ lifetimes: { attached() { Object.defineProperty(this, 'isComponent', { enumerable: true, get() { return true }, }); }, }, });
很容易理解,这种错误的起因在于试图给对象重新定义一个不可配置的属性,
具体可以查看MDN上的说明。
本文共计1415个文字,预计阅读时间需要6分钟。
组件生命周期,通常是我们业务逻辑开始的地方。如果业务场景比较复杂,组件生命周期有不符预期的表现时,可能会引发一些业务bug,它们极难复现和修复。组件 attached
组件生命周期,通常是我们业务逻辑开始的地方。
如果业务场景比较复杂,组件生命周期有不符合预期的表现时,
可能会导致一些诡异的业务bug,它们极难复现和修复。
组件 attached 生命周期执行次数
按照通常的理解,除moved/show/hide等生命周期可能多次执行外,
严格意义上与组件加载相关的生命周期,如:created、attached、ready等,每个组件实例应该只执行一次。但是事实真的如此吗?
背景
这个问题的发现,源于我们在小程序的报错日志中,
收到大量类似Cannot redefine property: isComponent的报错。
原因分析
通过变量名可以追溯到我们在代码中的定义方式为:
Component({ lifetimes: { attached() { Object.defineProperty(this, 'isComponent', { enumerable: true, get() { return true }, }); }, }, });
很容易理解,这种错误的起因在于试图给对象重新定义一个不可配置的属性,
具体可以查看MDN上的说明。

