Vue-面试要点

306 阅读1分钟

生命周期

链接

juejin.cn/post/684490…

www.juejin.im/post/684490…

8个生命周期

  1. beforecreate:数据和方法都不能被访问
  2. created:获取一些数据
  3. beforemount:虚拟Dom创建完成
  4. mount:Dom挂载完成,操作Dom($refs)
  5. beforeupdate:虚拟Dom重新渲染之前,可以更改数据而不被重新渲染
  6. update:数据更新完成了
  7. beforedestroy:做一些收尾工作
  8. destroyed:组件拆除,数据销毁

作用

有多个事件钩子,让我们控制Vue实例过程更加清晰

第一次页面加载

会触发前4个钩子事件

MVVM

model-view-viewmodel,开发者只需要关注数据model层面的信息,不需要去关注操作DOM,关心dom怎么样变化,vue这个框架会自动在view(视图层)展现这种变化。

v-if和v-show

keep-alive

切换组件会被保存在缓存中,而不是被创建和销毁。actived和deactived,include和exclude。

V-model

本质是value和input的语法糖

router和route

router是路由实例对象,包含了跳转和钩子函数等

route是路由信息对象,包含了path,query等路由信息参数

vuex

vuex

vue框架的状态管理

属性:state,getter,action。mutation,module

响应式原理

数据劫持

用 Object.defineProperty重新设置对象中的属性达到目的

        let obj = { name: 'zxx', age: 25 }        // console.log(Object.keys(obj));        //返回键名组成的数组['name','age']                Object.keys(obj).forEach(key => {            let value = obj[key]            Object.defineProperty(obj, key, {                get() { console.log("查看了get"); return value },                set(newValue) {                    value = newValue                    console.log('修改了set');                }            })        })

发布订阅者

        class Dep {            constructor() {                subs = []            }            //get下面调用                        addSub(watcher) {                this.subs.push(watcher)            }            //set下面调用                        notify() {                this.subs.forEach(item =>                    item.update())            }        }        class Watch {            constructor() {            }            update() { console.log('进行数据更新'); }        }        //Foreach开始执行new dep()        //get函数下面执行生成new watch()与addSub(watcher)

文字部分

Observer会把所有data的属性进行数据劫持/数据代理,compile会把创建所有的订阅者并且把他们加到Dep对象中的(一个属性对应一个dep对象)。

当数据发生变化时,Observer会先观察到,并告诉dep,dep执行notify让watcher进行更新,最后响应到view中

链接

segmentfault.com/a/119000000…

Vue3响应原理

运用了proxy代理的方法,

组件的data为什么是个函数

复用,实例,对象是引用类型,函数

通信

父-子 props

子-父$emit

Ref 获取实例的方式调用组件的属性或者方法

eventbus(事件总线)

vuex

SSR

服务端渲染 :也就是将Vue在客户端把标签渲染成HTML的工作放在服务端完成,然后再把html直接返回给客户端

路由

hash(url+#)和history(html5的API)

Render

1.template通过编译生成AST树

2.AST树生成Ve的render渲染函数

3.render渲染函数结合数据生成虚拟Dom

4.Diff和Patch后生成新的UI界面(真实Dom渲染)

作用:直接使用render函数的vuejs代码更较小,渲染过程更加快,性能可靠。

Ref

就是绑定元素或者子组件的,类似于js获取Dom节点,好处减少Dom节点的消耗

注意点:

  • ref本身是作为渲染结果被创建的,在初始渲染的时候不能访问他们

  • $refs也不是响应式的,不能再模板中做数据绑定

CDN引入

引入的是min.js,体积更小!