响应式与生命周期
2025年5月19日大约 2 分钟
响应式
响应式:当某一个数据发生改变的时候,与之相关联的内容会自动的改变或刷新
Vue中的响应式时通过 Object.defineProperty() 中的 setter 方法,当修改属性的时候会自动叫用 setter 方法,这是该方法不仅仅可以更改数据,也可以进行一些其他的操作,也被称为数据劫持而与之相对应的 getter 方法被称为数据代理
Vue会给data中的所有属性以及属性中的属性添加响应式,后补的方法不会自动添加需要手动添加
Vue.set(目标对象, "属性名", 值);
vm.$set(目标对象, "属性名", 值);
// 例
vm.$set(vm.a, 't', "我是后加的");不能直接给根(vm | vm.$data)直接追加属性,根中的属性只能自己预先声明
在数组内,通过数组的下标去修改数组中的元素,默认没有响应式处理,有两种解决方案:
- 可以通过上面的两种
set方法进行添加响应式,如:vm.$set(目标数组, 下标, 值); - 条用Vue指定的7个API:
push():末尾添加元素pop():弹出末尾元素reveres():反转数组splice():修改shift():移除第一个元素unshift():向第一个添加元素sort():对数组进行排序
生命周期
在指定时间点内执行特定的函数这个函数叫钩子函数
四个阶段八个钩子
四个阶段:初始、挂载、更新、销毁
每个阶段都有两个钩子函数,命名特点:beforeXxx()、xxxed()
初始
beforeCreate():创建数据代理和数据监测前执行
created():创建数据代理和数据监测后执行
挂载
beforeMount():页面挂载前执行
mounted():页面挂载后执行
更新
beforeUpdate():更新前执行(页面没更新但是data已更新)
updateed():更新后执行
销毁
beforeDestroy():销毁前执行
destroyed():销毁后执行
想要进去销毁阶段必须执行
vm.$destroy();所谓的销毁就是解绑vm所绑定的监视器、子组件、自定义事件和监听器(具体看vue版本),vm实例并不会消失
示例
const vm = new Vue({
el: "#app",
data: {},
// 创建
beforeCreate() { console.log("创建前") },
created() { console.log("创建后") },
// 挂载
beforeMount() { console.log("挂载前") },
mounted() { console.log("挂载后") },
// 更新
beforeUpdate() { console.log("更新前") },
updated() { console.log("更新后") },
// 销毁
beforeDestroy() { console.log("销毁前") },
destroyed() { console.log("销毁后") }
})
