关于生命周期
生命周期有八个
- beforeCreate:data和methods中的数据都还没有初始化。不能在这个阶段使用data中的数据和methods中的方法。
- created:data 和 methods都已经被初始化好了,如果要调用 methods 中的方法,或者操作 data 中的数据,最早可以在这个阶段中操作。
- beforeMount:在内存中已经编译好了模板了,但是还没有挂载到页面中,此时,页面还是旧的。
- mounted:执行到这个钩子的时候,就表示Vue实例已经初始化完成了。此时组件脱离了创建阶段,进入到了运行阶段。 如果我们想要通过插件操作页面上的DOM节点,最早可以在这个阶段中进行。
- beforeUpdate: 当执行这个钩子时,页面中的显示的数据还是旧的,data中的数据是更新后的, 页面还没有和最新的数据保持同步。
- updated:页面显示的数据和data中的数据已经保持同步了,都是最新的。
- beforeDestory:Vue实例从运行阶段进入到了销毁阶段,这个时候所有的 data 和 methods , 指令, 过滤器 ……都是处于可用状态。还没有真正被销毁。
- destroyed: 这个时候所有的 data 和 methods , 指令, 过滤器 ……都是处于不可用状态。组件已经被销毁了
发送请求在那个阶段比较好?
在js中一般是先执行同步的方法,再执行异步的方法。所以不管是放在created中还是mounted中,发送的请求只要是异步的,都会最后才执行。所以一般来说没有最好的选择,要根据实际情况来选择。
1.如果生命周期中调用的方法是定义在methods中的,如果在beforeCreate中发送请求,会找不到这个方法,因为,befroeCreate这个生命周期还没有mothods和data。
2.如果是父子组件的情况,要根据父子组件加载的生命周期顺序来选择。父beforeCreate》父created》父beforeMount》子beforeCreate》子created》子beforeMount》子mounted》父mounted。如果子组件的在前,需要优先加载子组件的数据,那么我们就不能把父组件的请求放在created中,将父组件的请求往后放,将子组件的请求往前放。如果是需要先加载父组件的数据,就需要将父组件的请求放在created。
如果将父组件的请求写在created中,将子组件的请求也写在created中,等生命周期结束之后,会先执行父组件的请求,因为父组件的created会先执行。可以看做,那个请求放在前,等生命周期执行完之后,它的执行优先级就越高。
在created中怎么获取DOM?
只需要用异步就可以了(setTimeout、promise等),因为js会先执行同步方法,也就是先执行beforeCreate、created、beforeMount、mounted这四个生命周期方法,然后才会去执行一步方法,这个时候执行的异步方法就可以得到DOM了,因为已经挂载了。
进入到组件会执行那些生命周期?
进入组件之后会执行这四个beforeCreate、created、beforeMount、mounted
父组件和子组件生命周期加载的顺序?
父beforeCreate》父created》父beforeMount》子beforeCreate》子created》子beforeMount》子mounted》父mounted
加入keepalive会执行那些生命周期?
Keep-alive是用来缓存组件的。如果使用了keep-alive组件,会额外增加两个生命周期。
activated
deactivated
如果当前组件加了keep-alive,第一次进入这个组件会执行五个生命周期,beforeCreate、created、beforeMount、mounted、activated,当第二次进入的时候只会执行activated,离开这个组件的时候会执行deactivated。
你在什么场景下用过那些生命周期,说一说生命周期的使用场景.
created
mounted
activated
deactivated