【测试平台开发】Vue生命周期钩子和侦听器学习教程
Vue.js是一个用于构建用户界面的渐进式JavaScript框架,它以其简洁的API和高效的响应式系统而广受欢迎。对于Vue.js开发者来说,理解侦听器和生命周期钩子是至关重要的。本文将详细介绍Vue.js中的侦听器和生命周期钩子,并通过示例代码帮助小白快速上手。
一、生命周期钩子
Vue组件实例在创建和销毁过程中会经历一系列的生命周期钩子。这些钩子允许开发者在组件的不同阶段插入自己的代码。
1.beforeCreate
实例初始化之前,此时无法访问数据、计算属性或方法。
示例:
beforeCreate() {
console.log('实例初始化之前');
}
2.created
实例初始化完成,此时可以访问数据模型(data)、计算属性(computed)和方法(methods)。
示例:
created() {
console.log('实例初始化完成');
// 可以在这里发送异步请求
}
3.beforeMount
实例挂载之前,此时模板已经在内存中编译完成,但尚未挂载到DOM。
示例:
beforeMount() {
console.log('实例挂载之前');
}
4.mounted
实例挂载完成,此时可以访问DOM元素。
示例:
mounted() {
console.log('实例挂载完成');
// 可以在这里渲染图表或发送异步请求
}
5.beforeUpdate
响应式数据更新前,此时数据已经更新,但DOM尚未重新渲染。
示例:
beforeUpdate() {
console.log('实例更新前');
}
6.updated
响应式数据更新后,此时DOM已经重新渲染。
示例:
updated() {
console.log('实例更新后');
}
7.beforeDestroy
实例销毁之前,此时仍然可以修改响应式数据。
示例:
beforeDestroy() {
console.log('实例销毁之前');
}
8.destroyed
实例销毁完成,此时已经销毁了监听器、子组件和事件监听。
示例:
destroyed() {
console.log('实例销毁完成');
}
二、侦听器(Watchers)
1.侦听器允许开发者在响应式数据变化时执行特定的逻辑。Vue提供了两种方式来使用侦听器:watch选项和$watch方法。
基本示例
export default {
data() {
return {
question: '',
answer: 'Questions usually contain a question mark. ;-)'
};
},
watch: {
question(newQuestion, oldQuestion) {
if (newQuestion.includes('?')) {
this.getAnswer();
}
}
},
methods: {
async getAnswer() {
this.answer = 'Thinking...';
try {
const res = await fetch('https://yesno.wtf/api');
this.answer = (await res.json()).answer;
} catch (error) {
this.answer = 'Error! Could not reach the API. ' + error;
}
}
}
}
在这个示例中,当question数据变化时,如果包含问号,则调用getAnswer方法。
2.深层侦听器
默认情况下,watch是浅层的,即只有被侦听的属性本身变化时才会触发回调。如果想侦听嵌套对象的所有变更,需要使用deep: true选项。
export default {
data() {
return {
someObject: {
nested: {
key: 'value'
}
}
};
},
watch: {
someObject: {
handler(newValue, oldValue) {
// 处理嵌套对象的变更
},
deep: true
}
}
}
3.即时回调
默认情况下,watch是懒执行的,即只有在数据源变化时才会执行回调。如果想在创建侦听器时立即执行一次回调,可以使用immediate: true选项。
export default {
data() {
return {
question: ''
};
},
watch: {
question: {
handler(newQuestion) {
// 在组件实例创建时会立即调用
},
immediate: true
}
}
}
4.使用$watch方法
$watch方法允许在组件实例创建后动态添加侦听器。
export default {
data() {
return {
question: ''
};
},
created() {
this.$watch('question', (newQuestion) => {
// 处理question的变化
});
}
}
合集:
测试平台开发
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
2022-12-01 chromedriver与chrome的对应关系表