前端面试题总结之(四):Vue开发相关(陆续更新)

前言

你好,我是Dr.叶子,用心写最优美的博客,弹最好听的钢琴!

最近更新:

  • 2020年10月10日

1. Vue 的生命周期

【概括】

Vue 实例从创建到销毁的过程

“创建” 、“挂载”、“更新”、“销毁”

  • beforeCreate:   组件创建——前
  • created:            组件创建——完成
  • beforeMount:   模版挂载——前
  • mounted:          模版挂载——完成
  • beforeUpdate:  组件数据更新——前
  • updated:           组件数据更新——完成
  • beforeDestroy: 组件销毁——前
  • destroyed:        组件销毁——完成

【官网图示】
在这里插入图片描述

  • 第一次加载页面触发: beforeCreate, created, beforeMount, mounted;
  • DOM 渲染: 在 mounted 中完成;

2. 对于 MVVM 的理解

  • M(model) : 数据层
  • V(view) : 视图层
  • VM(view-model): 视图模型层,用来连接 “数据层” 和 “视图层”

MVVM 与 MVC 模式的区别:

  1. MVC 中 Controller 演变成 MVVM 中的 view-model;
  2. MVVM 解决了 MVC 中大量 DOM 操作使页面渲染性能降低、加载速度慢的问题;
  3. Vue 是数据驱动,通过数据来显示视图层,替代节点操作;
  4. 适合 数据操作较多 的场景,更加便捷;

3. v-show 和 v-if 指令区别

  • v-show: 通过修改 display 显示 / 隐藏。(实际已经渲染

  • v-if: 直接销毁和重建 DOM 显示 / 隐藏。(未渲染


4. Vue 的常用指令和它的用法

  • v-if: 是否隐藏
  • v-for: 数据循环
  • v-bind: 绑定属性
  • v-model: 双向数据绑定

5. Vue 双向数据绑定原理

基于JS原型链

  • 数据劫持
  • 发布订阅者模式

当要读取数据的时候会自动触发方法,并且会被赋值。


6. Vue 响应式原理

  • 解释: 在改变数据的时候,视图会跟着更新

  • React: 是通过 this.setState 去改变数据,然后根据新的数据重新渲染出虚拟DOM,最后通过对比虚拟DOM找到需要更新的节点进行更新。

  • Vue: 利用了 Object.defineProperty 的方法里面的 settergetter 方法的观察者模式来实现。

// 1.初步认识 Object.defineProperty
const data = {};
let name = 'vue';

Object.defineProperty(data, 'name', {
    get: function() {
        console.log('get');
        return name;
    },
    set: function(newValue) {
        console.log('set');
        name = newValue;
        // todo 视图重新渲染
    }
})

console.log(data.name);	// > vue
data.name = '叶子';
console.log(data.name);	// > 叶子

// 2.基本响应式实现
const data = {
    name: '叶子',
    age: 20
};

// 变成响应式数据
observer(data);

function observer(target) {
    if (typeof target !== 'object' || target === null) {
        return target;
    }

    for (let key in target) {
        defineReactive(target, key, target[key]);
    }
}

function defineReactive(target, key, value) {
    Object.defineProperty(target, key, {
        get() {
            return value;
        },
        set(newValue) {
            if (newValue !== value) {
                value = newValue;
            }
            console.log('更新视图');
        }
    })
}

console.log(data.name);
data.name = '叶子2';
console.log(data.name);
==================================================
> 叶子
> 更新视图
> 叶子2

知乎:最简化 VUE的响应式原理


 

推荐阅读

【1】Vue官网学习.


 

系列文章

前端面试题总结之(一):HTML篇.

前端面试题总结之(二):CSS篇.

前端面试题总结之(三):JavaScript篇.

前端面试题总结之(四):Vue开发相关.

前端面试题总结之(五):综合知识点.


 

后语

  1. 原创内容,转载说明出处哦!
  2. 以上内容本人整理,亲测可行,如有任何问题,敬请指正,谢谢~~
  3. 点赞、收藏、也欢迎打赏,我弹钢琴你听呀~~哈哈!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值