Vue2的生命周期钩子有哪些?数据请求放在哪个钩子
- create * 2
beforeCreate
和created
- mount * 2
beforeMount
和mounted
- update * 2
beforeUpdate``updated
- destory * 2
beforeDestroy``destroyed
还有三个写在钩子列表里:
activated
(被keep-alive缓存的组件激活时调用)deactivated
(被keep-alive缓存的组件失活时调用)errorCaptured
数据请求放在mounted里面
如果放在create里面会在后端SSR执行一次,前端执行一次,这不符合我们的预期。放在update里面如意造成无限循环。
Vue2组件间通信方式
-
父子组件:使用「props和事件」进行通信
-
爷孙组件:
a. 使用两次父子组件间通信来实现
b. 使用「provide和inject」来通信
-
任意组件:
使用eventBus = new Vue()
来通信a. 主要API是
eventBus.$on
和eventBus.$emit
b. 缺点是事件多了会混乱,难以维护
-
任意组件:使用Vuex通信(Vue3可用Pinia代替Vuex)
Vuex用过吗?怎么理解?
-
Vuex是专为Vue.js应用程序开发的状态管理模式+库
-
说出核心概念的名字和作用:
store/State/Getter/Mutation/Action/Module
a. store是个大容器,包含以下所有内容
b. State用来读取状态,带有一个mapState辅助函数
c. Getter用来读取派生状态,富有一个mapGetters辅助函数
d. Mutation用于同步提交状态变更,富有一个mapMutation辅助函数
e. Action用于异步变更状态,但他提交的是mutation,而不是直接变更状态。
f. Module用来给store划分模块,方便维护代码
Mutation和Action为什么要分开
为了让代码更易于维护。
VueRouter用过吗?怎么理解?
- Vue Router是Vue.js的官方路由。适用于单页面应用。
- 说出核心该你那的名字和作用:
router-link
,router-view
,嵌套路由,Hash模式,History模式,导航守卫,懒加载。
Hash模式和History模式区别
- 一个用的Hash,一个用的History API
- Hash不需要后端nginx配合,History需要
导航守卫如何实现登录控制
router.beforeEach((to,from,next)=>{
if(to.path === '/login') return next()
if(to是受控页面 && 没有登录) return next('/login?return_to='+to.path)
next()
})
Vue2是如何实现双向绑定的
-
一般使用
v-model
/.sync
实现,v-model
是v-bind:value
和v-on:input
的语法糖。a.
v-bind:value
实现了 data =》 UI的单向绑定b.
v-on:input
实现了UI =》data的单向绑定c. 合起来就是双向绑定
-
这两个单向绑定如何实现的?
a. 前者通过
Object.defineProperty
API给data创建getter和setter,用于监听data的改变,data一变就会改变UIb. 后者通过template compiler给DOM添加事件监听,DOM input的值改变了就回去修改data。