micro-app【微前端系列教程】生命周期
子应用渲染过程中会触发相应的生命周期事件
生命周期事件名称 | 触发时机 |
---|---|
created | 标签初始化后,加载资源前 |
beforemount | 加载资源完成后,开始渲染之前 |
mounted | 子应用渲染结束后 |
unmount | 子应用卸载时 |
error | 子应用加载出错时(只有会导致渲染终止的错误才会触发) |
vue 中监听生命周期事件
<template>
<micro-app
name='xx'
url='xx'
@created='created'
@beforemount='beforemount'
@mounted='mounted'
@unmount='unmount'
@error='error'
/>
</template>
<script>
export default {
methods: {
created () {
console.log('micro-app元素被创建')
},
beforemount () {
console.log('即将渲染')
},
mounted () {
console.log('已经渲染完成')
},
unmount () {
console.log('已经卸载')
},
error () {
console.log('加载出错')
}
}
}
</script>
react 中监听生命周期事件
在<micro-app>
标签所在的文件顶部添加polyfill,注释也要复制。
/** @jsxRuntime classic */
/** @jsx jsxCustomEvent */
import jsxCustomEvent from '@micro-zoe/micro-app/polyfill/jsx-custom-event'
<micro-app
name='xx'
url='xx'
onCreated={() => console.log('micro-app元素被创建')}
onBeforemount={() => console.log('即将渲染')}
onMounted={() => console.log('已经渲染完成')}
onUnmount={() => console.log('已经卸载')}
onError={() => console.log('加载出错')}
/>
手动监听生命周期事件
const myApp = document.querySelector('micro-app[name=my-app]')
myApp.addEventListener('created', () => {
console.log('created')
})
myApp.addEventListener('beforemount', () => {
console.log('beforemount')
})
myApp.addEventListener('mounted', () => {
console.log('mounted')
})
myApp.addEventListener('unmount', () => {
console.log('unmount')
})
myApp.addEventListener('error', () => {
console.log('error')
})
全局监听
在每个子应用的生命周期执行时都会触发。
import microApp from '@micro-zoe/micro-app'
microApp.start({
lifeCycles: {
created (e, appName) {
console.log(`子应用${appName}被创建`)
},
beforemount (e, appName) {
console.log(`子应用${appName}即将渲染`)
},
mounted (e, appName) {
console.log(`子应用${appName}已经渲染完成`)
},
unmount (e, appName) {
console.log(`子应用${appName}已经卸载`)
},
error (e, appName) {
console.log(`子应用${appName}加载出错`)
}
}
})
全局事件
在子应用的加载过程中,micro-app会向子应用发送一系列事件,包括渲染、卸载等事件。
监听子应用的渲染事件
window.onmount = (data) => {
console.log('子应用已经渲染', data)
}
监听子应用的卸载事件
window.onunmount = () => {
// 执行卸载相关操作
console.log('子应用已经卸载')
}
或
window.addEventListener('unmount', function () {
// 执行卸载相关操作
console.log('子应用已经卸载')
})