Vue的几个开发技巧

本文介绍了一种在Vue中优化子组件生命周期调用和定时器管理的方法。通过父组件绑定子组件的mounted钩子,实现数据异步加载,使子组件专注于渲染。同时,利用$once监听beforeDestroy钩子,确保定时器在组件销毁前被正确清除,避免内存泄漏。
摘要由CSDN通过智能技术生成

1、在父组件中绑定子组件的生命周期

我们一般的写法是在子组件的mounted中调用异步方法获取相应数据进行渲染。当然,异步方法中的一些参数可以在路由中获取,也有可能必须通过父组件的props传递。当该组件的通用性较强时,异步调用的方法和接口都可能发生变化,因此我们希望子组件只负责渲染。这样,可以通过以下方法实现:

子组件:

export default {
    mounted() {
        this.$emit('getData');
    }
}

父组件

<template>
    <div>
        <Child @getData="getData" :data="data" />
    </div>
</template>

 

其实还有一种简洁的方法,使用@hook即可监听组件生命周期,子组件内只需要负责渲染,同样的,created、updated等也可以使用此方法。

<template>
    <div>
        <Child @hook:mounted="getData">
    </div>
</template>

 

2、定时器解绑

有时候我们在页面挂载时需要使用到计时器,相应的,在页面销毁时需要清除定时器。下面的代码看起来没啥问题,但仔细一看,this.timer 唯一的作用只是能够在beforeDestroy内取到计时器序号,除此之外没有任何用处。

export default {
    mounted() {
        this.timer = setInterval(() => {
            // 相应操作
        }):
    },
    beforeDestroy() {
        clearInterval(this.timer);
    }
}

这里,我们可以通过$on或者$once监听页面生命周期销毁来解决这个问题:

export default {
    mounted() {
        this.creatInterval(Date.now());
    },
    creatInterval(now) {
        let timer = setInterval(() => {
            console.log(now);
        }, 1000)
        this.$once('hook:beforeDestroy', function() {
            clearInterval(timer);
        })
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值