Garfish 提供了完整的生命周期管理机制,确保子应用的加载、挂载、更新和卸载过程可控且可预测。
生命周期钩子
1. bootstrap(初始化)
- 触发时机:子应用首次加载时
- 作用:执行子应用的初始化逻辑,如配置加载、依赖注入
- 只执行一次:在子应用生命周期中只调用一次
- 示例:
javascriptexport function bootstrap() { console.log('子应用初始化'); return Promise.resolve(); }
2. mount(挂载)
- 触发时机:子应用需要渲染到页面时
- 作用:将子应用渲染到指定的容器中
- 可多次调用:每次路由切换到该子应用时都会触发
- 示例:
javascriptexport function mount(container) { ReactDOM.render(<App />, container); return Promise.resolve(); }
3. unmount(卸载)
- 触发时机:子应用需要从页面移除时
- 作用:清理子应用的 DOM、事件监听、定时器等资源
- 必须执行:确保完全清理,避免内存泄漏
- 示例:
javascriptexport function unmount(container) { ReactDOM.unmountComponentAtNode(container); return Promise.resolve(); }
4. update(更新)
- 触发时机:子应用需要更新时(可选)
- 作用:处理子应用的更新逻辑
- 非必需:不是所有子应用都需要实现
- 示例:
javascriptexport function update(props) { // 处理属性更新 return Promise.resolve(); }
生命周期流程
- 首次加载:bootstrap → mount
- 路由切换:unmount(旧应用)→ mount(新应用)
- 重新激活:直接调用 mount(不重复 bootstrap)
- 完全卸载:unmount + 清理所有资源
最佳实践
- 异步处理:所有生命周期函数都应返回 Promise
- 错误处理:在生命周期中添加错误捕获逻辑
- 资源清理:在 unmount 中彻底清理所有副作用
- 性能优化:避免在 mount 中执行耗时操作
- 状态管理:合理管理子应用的状态,避免重复初始化
通过合理使用生命周期钩子,可以确保子应用的稳定运行和资源的有效管理。