Vue2的生命周期钩子有哪些?请求数据放在哪个钩子里最合适?
Vue2的生命周期钩子按照before和已完成为一对,共有4对:
- create
- mount
- update
- destroy
除此之外还有activatied,deactivate,errorCaptured三个钩子。
数据请求一般放在mounted里。因为created钩子会有ssr(server side render)问题,updated钩子的触发又过于频繁。
Vue2组件间通信方式有哪些?
- 父子组件
- a.父=>子:用props
- b.子=>父:事件(如$emit click事件)
- 爷孙组件
- a.使用两次父子间通信
- b.使用provide和inject,也就是依赖注入
- 任意组件:eventBus,事件多了就会很乱,难以维护。
- 任意组件:Vuex。
怎么理解Vuex?
- 是什么?状态管理模式和库。
- 核心概念
- a. store是一个大容器
- b. state用来读取状态,有一个mapStates函数
- c. getter用来读取派生状态,有一个mapGetters函数
- d. mutation用来同步提交状态变更,有一个mapMutations函数
- e. action用来异步变更状态,但它提交的是mutation
- f. module用来划分store的模块,方便维护代码
- 为什么要区分mutation和action?为了方便维护。但Pinia就把这两个概念合并了。
怎么理解VueRouter?
- 是什么?官方路由,适用于单页面应用。
- 核心概念
- a.
router-link与router-view - b. 前端路由懒加载:
import()有括号的就是懒加载 - c. 嵌套路由
- d. hash模式和history模式
- e. 路由守卫:每一个路由在进入/离开时都可以设置一个钩子,在钩子中可以设置相应的操作
- hash模式和history模式的区别:
- a. hash模式用的是url里面的#,history模式用的是html5提供的history API
- b. 只有history模式需要后端nginx配合(把所有请求都重定向到index)
- c. hash模式seo不友好
Vue2是如何实现双向数据绑定的?
- 一般通过
v-model和.sync实现,v-model是v-bind:value和v-on:input的语法糖。
- a.
v-bind:value实现了数据 => UI的绑定。 - b.
v-on:input实现了UI => 数据的绑定。 两个单向绑定合起来就是双向数据绑定了。
- 这两个单向绑定是如何实现的?
- a. 前者通过Object.defineProperty的API给data的每个属性递归地创建getter和setter,用于监听data的改变,data一改变就安排UI改变。
- b. 后者通过template compiler给dom添加事件监听,dom input的值改变了就回去修改data。