linux cpu占用率如何看
234
2022-09-16
Vue核心⑬(生命周期)
文章目录
生命周期引入挂载流程更新流程销毁流程生命周期总结
生命周期引入
生命周期:
又名:生命周期回调函数、生命周期函数、生命周期钩子。是什么:Vue在关键时刻帮我们调用的一些特殊名称的函数。生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的。生命周期函数中的this指向是 vm 或 组件实例对象。
例如我们现在有一个需求,页面上显示一行文字,并且动态的改变它的透明度。
代码如下:
注意:
{opacity}使用了对象的简写形式因为定时器在vm的外面,所以我们要获取opacity就可以通过数据代理从vm上获得因为小数的运算在js中是不准确的,所以我们没有写成vm.opacity === 0,而是写成vm.opacity <= 0
这样写可以实现功能,但是Vue实例与处理逻辑分开了,且处理逻辑还在操作Vue中的数据。也就是说从功能上来讲两者连在一起,但是从代码层面上来讲,他们俩是割裂开的。我们希望将这个逻辑放入到Vue中去。
此时我们就可以借助生命周期函数。在Vue完成模板的解析并把真实DOM全部挂载到页面上完毕之后,会调用一个mounted()函数,我们可以借助它来完成这个案例:
挂载就是第一次把真实DOM放入到页面中
mounted中Vue已经把它的this维护成了vm。所以上面的代码中使用箭头函数的时候,this往外寻找就是vm。
挂载流程
下图中红圈mounted之前的部分都属于挂载部分。
红色圆框对应着生命周期函数
其中有几个注意点:
这个地方的create不是指的vm创建,而是数据监测、数据代理的创建
此处是可以进行DOM操作的,页面的效果也会发生变化。但是紧随其后
也就是说不管你此时如何操作DOM,当Vue把虚拟DOM转为真实DOM之后,你原来操作的效果都会消失。
template是什么? 例如我们现在有一段代码:
我们可以借助template让容器里面什么都不写:
注意:
template后面跟字符串如果不想全写在一行就要使用模板字符串,否则报错Vue会直接把template当作模板执行后面的步骤(解析生成真实DOM·····)。template里面只能有一个根元素,所以我们把他用div包裹(不要使用标签去包裹,会报错)注意:
更新流程
销毁流程
当我们执行了vm.$destroy()之后,代表着Vue进入了销毁流程。不过我们要注意的是vm销毁了,但他的工作成果还在,也就是说页面还是正常显示的。只是说没有人帮我们继续管理DOM。
例如:
在beforeDestroy这一部分,图中的文字告诉我们data、methods、指令等都是可用的。我们可以试一下:
结果:
结果我们发现add()确实可以用,但是页面并没有发生变化。也就是说在beforeDestroy这一阶段,所有对数据的修改不会再发生更新。
生命周期总结
生命周期函数一共是8个,我们可以将它们看作4对:
将要创建 / 创建完毕将要挂载 / 挂载完毕将要更新 / 更新完毕将要销毁 / 销毁完毕
对应着:
beforeCreate() / created()beforeMount() / mounted()beforeUpdate() / updated()beforeDestroy() / destroyed()
代码如下:
为了能让methods中的stop方法能访问到定时器,我们可以把定时器添加到vm身上。当然使用变量提升也是可以的。
如果我们再添加一个按钮:将透明度设置为1。代码如下:
我们可以使用另外一种暴力的方法停止变换,使用$destroy():
常用的生命周期钩子:
mounted: 发送ajax请求、启动定时器、绑定自定义事件、订阅消息等【初始化操作】。beforeDestroy: 清除定时器、解绑自定义事件、取消订阅消息等【收尾工作】。
关于销毁Vue实例
销毁后借助Vue开发者工具看不到任何信息。销毁后自定义事件会失效,但原生DOM事件依然有效。一般不会在beforeDestroy操作数据,因为即便操作数据,也不会再触发更新流程了。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~