[BUG]自定义组件多实例时上下文this错乱、生命周期函数没有执行
发布于 6 年前 作者 pyan 7695 次浏览 来自 问答

不知道是不是BUG,但是感觉和文档描述的预期不一样,组件生命周期函数难道不是各个实例的吗?。

当页面中已经存在自定义组件的多个实例时(1个或者多个),如果这时候再动态创建一个新的实例,会出现两个问题:

1、这个实例的相关生命周期函数(attached,ready等)不会执行。

2、而且如果通过this.data获取到的数据是“前一个”“最近”一次创建的实例的数据。

第一个问题不知道是不是我理解错了“生命周期函数”,但是第二个感觉应该是个问题。

5 回复

1、必然会执行,每个实例都会;

2、this是组件的“实例对象”,每个实例会对应一个this。

是的,是的,之前忽略了这个问题。最后一个wx:key搞定了~~~~

你的意思是,你 wx:for 里面有自定义组件节点?这样的话你要确保 wx:key 被设置了,否则会尝试复用之前的节点(无论是基础组件节点还是自定义组件节点)。

这算BUG吗?对于类似“每次刷新显示10条最新消息”这类的功能,如何正确处理?因为数组长度是固定的,只是每个item有变化

终于搞清楚问题出在哪了,我的数据data是个固定长度的数组,比如length为10。每次刷新我虽然是重新定义了一个数组,但是由于长度length没变,组件的更新机制导致没有重新构造组件实例,还是在原组件实例上进行“修改”,所以ready之类的没有执行,而且给人的感觉this上下文还是原来的。

回到顶部