vue踩坑:新旧实例生命周期函数的顺序

159 阅读1分钟

小编在工作中因为不规范地使用eventBus,发现了一个知识盲区!那就是:vue组件新旧实例更替时生命周期函数调用顺序

结论先行:

  1. 发现vue新旧实例的生命周期函数执行顺序是:

    1. 新实例created() → 旧实例beforeDestroy() → 新实例 mounted()
  2. 复杂项目使用EventBus不便于管理数据流。要用的话注意:

    1. eventBus.$on(’save’, callBackFunc) 添加callBackFunc对事件‘save’的监听。
    2. eventBus.$off(’save’, callBackFunc),解除callBackFunc对事件’保存’的监听,如果空着就是解除!!全局!!对事件Event的监听。

问题:

这里因为小编偷懒,只写了eventBus.$off(’save’),所以解除了事件的全局监听!所以就变成了:

新实例created() →旧实例beforeDestroy() →新实例 mounted()
添加监听 →移除全局监听

解决办法

  1. 在A组件的created中:

    eventBus.$off(’save’,callBackFunc).$on(’save’,callBackFunc)

  2. 或者是在mounted中添加监听在beforeDestroy中移除监听 | | | | | --- | --- | --- | | 新实例created() → | 旧实例beforeDestroy() → | 新实例 mounted() | | | 移除全局监听 | 添加监听|