小程序components的生命周期

本文探讨了小程序组件的生命周期,包括不同阶段如实例化、节点树导入完成、布局完成等,并指出在components中生命周期函数的两种形式,即外部定义和lifetimes属性中定义。lifetimes内的函数具有更高优先级。此外,还概述了小程序从启动到关闭时各生命周期钩子函数的执行情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在components中的生命周期与小程序的生命周期是不一样的,其生命周期函数有两种形式,除了写在外面,还可以统一写在lifetimes属性中

components中的生命周期函数

1、 组件实例化: created 节点树还未导入, 无法使用setData
2、节点树导入完成: attached 可以使用setData来初始化数据,但无法操作节点
3、组件布局完成: ready 组件布局完成,可以获取到节点信息也可以操作节点
4、组件实例被移动到节点树另一个位置: moved
5、组件实例从页面节点移除: detached


生命周期函数的不同写法

   Component({
        properties:{
            innerText:{
                type:String
            }
        },
        data:{

        },
        methods:{

        },
        created:function(){
            // 组件生命周期函数,在组件实例进入页面节点树时执行,注意此时不能调用setData
            console.log('Component-1 >> created');
        },
        attached:function(){
            // 组件生命周期函数,在组件实例进入页面节点树时执行。
            console.log('Component-1 >> attached');
        },
        ready:function(){
            // 在组件布局完成后执行,此时可以获取节点信息
            console.log('Component-1 >> ready');
        },
        moved:function(){
            // 在组件实例被移动到节点树另一个位置时执行
            console.log('Component-1 >> moved');
        },
        detached:function(){
            // 在组件实例被从页面节点树移除时执行
            console.log('Component-1 >> detached');
        },
        lifetimes:{
            // 组件生命周期声明对象,将组件的生命周期收归到该字段进行声明,
            //原有声明方式仍旧有效,如同时存在两种声明方式,则lifetimes字段内声明方式优先级最高
            created:function(){
                console.log('Component-1 lifetimes >> created');
            },
            attached:function(){
                console.log('Component-1 lifetimes >> attached');
            },
            ready:function(){
                console.log('Component-1 lifetimes >> ready');
            },
            moved:function(){
                console.log('Component-1 lifetimes >> moved');
            },
            detached:function(){
                console.log('Component-1 lifetimes >> detached');
            }
        },
        pageLifetimes:{
            // 组件所在页面的生命周期声明对象,目前仅支持页面的show和hide两个生命周期
            show:function(){
                console.log('Component-1 pageLifetimes >> Show');
            },
            hide:function(){
                console.log('Component-1 pageLifetimes >> Hide');
            }
        }

    })

lifetimes中的生命周期函数执行了,外层的生命周期函数没有执行,所有当两者同时存在时,lifetimes中的优先级要高。


小程序从启动到关闭,生命周期函数的执行情况

1、初次打开: 会执行小程序的生命周期钩子函数:onLaunch -> onShow -> onReady
2、使用navigateTo离开当前页面: 保留所离开的页面,执行onHide
3、使用navigateBack离开当前页面: 销毁当前页面,执行onHide -> onUnload
4、使用switchTabTo离开当前页面: 销毁所有非tab页面,但保留所有已经加载的tab页面

原作链接:https://www.jianshu.com/p/1e3b5b507771

UniApp 中的组件生命周期包括以下几个阶段: 1. **beforeCreate**: 在组件实例被创建之前调用,此时组件的数据和方法都还未初始化。 2. **created**: 在组件实例被创建后调用,此时组件的数据已经初始化完成,但尚未渲染到页面上。 3. **beforeMount**: 在组件被挂载到页面之前调用,此时组件的模板已经编译完成,但尚未被渲染。 4. **mounted**: 在组件被挂载到页面后调用,此时组件已经渲染到页面上,可以进行 DOM 操作。 5. **beforeUpdate**: 在组件数据更新之前调用,此时组件的数据已经发生变化,但尚未更新到页面上。 6. **updated**: 在组件数据更新之后调用,此时组件的数据已经更新到页面上,可以进行 DOM 操作。 7. **beforeDestroy**: 在组件销毁之前调用,此时组件仍然可用,可以执行一些清理操作。 8. **destroyed**: 在组件销毁之后调用,此时组件已经被销毁,无法再使用。 除了以上常见的生命周期钩子外,UniApp 还提供了一些特定平台的生命周期钩子,如小程序平台的 `onLoad`、`onShow`、`onHide` 等。 你可以在组件的 `<script>` 部分定义这些生命周期钩子来监听组件的不同生命周期阶段,执行相应的逻辑。 以下是一个示例代码,展示了组件的生命周期钩子的定义方式: ```vue <script> export default { beforeCreate() { console.log('beforeCreate'); }, created() { console.log('created'); }, beforeMount() { console.log('beforeMount'); }, mounted() { console.log('mounted'); }, beforeUpdate() { console.log('beforeUpdate'); }, updated() { console.log('updated'); }, beforeDestroy() { console.log('beforeDestroy'); }, destroyed() { console.log('destroyed'); } }; </script> ``` 在上述示例中,我们在组件的 `<script>` 部分定义了各个生命周期钩子,并在每个钩子中输出了相应的信息。 当组件被创建、挂载、更新或销毁时,这些生命周期钩子将会被依次调用。 希望对你有所帮助!如果还有其他问题,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值