所谓的生命周期就是vue实例从创建到销毁的整个过程,通过vue的生命周期我们可以在不同的阶段进行不同的操作。
常用的生命周期函数应该有8个,分比为:
创建前后:beforeCreate、created
挂在前后:beforeMount、mounted
更新前后:beforeUpdate、updated
销毁前后:beforeDestory、destoryed
不常用的钩子函数有3个分别为:
如果用keep-alive缓存了组件,就会有actived、deactived这两个钩子函数
这些钩⼦函数如何触发?
页面一加载,就会触发vue实例创建前后和组件挂载前后的钩子函数,当视图中的数据发生改变时,会触发更新的钩子函数,当组件进行切换的时候,就会触发销毁的钩子函数。
我在项目开发中,我经常使用created和monuted这两个声明周期函数,created里面向后台发送请求,获取数据,也可以在这里获取本地存储的数据;而在monuted钩子函数里面,我经常获取DOM节点,虽然有时获取不到,我就会通过$nextTick()来获取DOM节点。
首先执行父组件的beforeCreate-->created-->beforeMount==>
然后执行子组件的beforeCreate-->created-->beforeMount->mounted==>
最后执行父组件的mounted
vuex就是vue官方给我们提供的一个状态管理工具,用于解决组件之间数据共享的问题。
state:里面存放的是状态(数据)
getters:计算属性,有点儿类似于我们vue里面的compted计算属性
mutations:它的主要作用就是修改state里面的数据,有点类似于我们vue里面的methods方法,mutations只能使用同步操作
actions:它的里面主要用于网络请求,可以异步操作
modules:主要用于模块化开发,在项目中,通常会将多个状态抽离到js文件,最后合并到modules中,这样方便后期的维护。
state:通过this.$store.state可以访问到里面的数据
mutations:通过this.$store.commit触发
getters:通过this.$store.getters访问计算属性
actions:通过dispatch可以异步修改state里面的数据
通过辅助函数的方式来进行调用和触发(mapState、mapGetter、mapMutation、mapAction)
如果我们想要改变state里面的状态,首先通过dispatch触发actions里面的方法,在通过commit来调用mutations里面定义的方法改变state,这就是vuex的运行机制。
vuex的弊端就是浏览器页面一刷新,数据就会丢失,我们一般结合本地存储来解决,通过localStorage或者sessionStorage将数据存储在本地,或者使用插件vuex-persist或者vuex-persistedstate进行存储。
vue路由有两种模式。
第一种是hash模式,带有#字符,不会包含在http请求中,并且hash模式不会重新加载页面;
第二种是history模式,如果前端url和后端的url不一致的话,会报404错误,这就需要前端和后端进行配合。
就是利用html5新增的两个特性方法,分别是pushState()和replaceState()来完成的。
vue一共给我们提供了三种路由守卫
第一种是全局路由守卫:
第二种是组件级路由守卫:
第三种是路由独享守卫:
v-if有更高的切换消耗;是动态的创建和销毁的一个过程。
v-show有更高的初始渲染消耗;是通过css样式display:none或display:block来控制显示和隐藏的。
所以说在频繁切换的的情况下,使用hidden更为合适,如果是条件判断就使用v-if。
v-for的优先级更高,因为v-for渲染的时候,DOM还未渲染完毕,这个v-if还无法判断;
在循环的外层包裹一层div或者template,将v-if放置外层。
methods:是一个用来定义方法的选项对象,不会被缓存;
computed:计算属性,结果会缓存,当结果值发生改变,结果值会再次缓存;
watch:监听属性,用于监听data里面的数据,当数据发生改变就会触发,不会被缓存;