Vue 面试

MVVM

Model-View-ViewModel.
Model是数据, View是页面, ViewModel: 是视图模型, 这是数据驱动的核心.
Model发生改变, 通知ViewModel, 对视图模型进行更新. 进一步修改View页面.
当用户操作View, 导致ViewModel发生改变, 也能即时通知Model更改数据.

双向数据绑定

数据劫持
observer
watcher
发布订阅模式

v-if, v-show 的区别

v-if判断后面的条件值真假切换的时候, 控制元素在DOM树中的存在与否. 如果初始值为假, 不编译, 不渲染.
v-show控制元素的display属性, 为显示或者隐藏.
如果频繁的切换显示隐藏, 使用v-show. 条件渲染使用v-if.

css 只在当前组件之内生效

<style scoped lang="sass">
  *{margin: 0}
</style>

vue 组件的生命周期

四个阶段:
创建前后: beforeCreate / created

  • beforeCreate之前, 初始化数据, 事件, 声明周期函数
  • beforeCreate之后, created之前, data, methods都已经创建好, 可以读取. 实现数据劫持, 添加事件发射, 事件监听.
    初始化工作完成.

挂载前后: beforeMount / mounted

  • beforeMount, 检查el:'#app'template. 将template 放进 render 函数中进行编译.虚拟DOM已经创建
  • mouned, 将Vue实例挂载到 #app 元素上

更新前后: beforeUpdate / updated

  • beforeUpdate, 即将完成更新操作, 在这里比对数据是否发生改变, 此生命周期钩子默认返回true. 如果返回false, 将不会触发更新.
  • updated, 得到beforeUpdate的肯定回复, 完成了更新操作

销毁前后: beforeDestroy / destoryed

  • beforeDestroy, 组件将要销毁, 解绑事件, 定时器, 清除依赖, 子组件
  • destroyed, 组件完成销毁

如果考虑 keep-alive, 将会存在组件的激活和失活, 必须将组件放在keep-alive标签中, 不会渲染成html标签

<keep-alive>
  <component v-bind:is="currentTabComponent"></component>
</keep-alive>

在组件的生命周期钩子中, 可以新增一个activateddeactivated.
分别在组件激活和失活的时候触发.

父子组件传值

父传子: 在子组件的标签上绑定

<div class="father">
  <child :value="100"></child>
</div>

子组件通过 props 获取

子传父:
触发父组件绑定在自己身上的事件, 将需要传递的值作为参数传递给这个事件处理函数

methods, computed, watch

methods: 只要某个函数依赖的值发生改变, 里面所有的方法都会执行一次. 事件处理函数一般写在这里
computed: 基于methods的性能, 所以如果某个值是计算出来的, 那将这个值放在这里再适合不过了.
watch:

watch: {
  key(new, old){
    // code
  }
}

如果 key 这个值发生了改变, 会立即出发这个函数, 执行里面的代码

循环中, key 的作用?

便于diff算法比对, 根据key的值, 能更精确的计算出那些东西是真正需要更新的, 能省去大部分不必要的DOM更新操作.

异步更新队列

Vue的数据更新是异步的, 当侦听器发现某个属性发生改变, Vue就会开启一个队列, 在一个事件循环中, 所有的属性如果被改变, 都会被push进这个队列, 在事件循环结束的时候, 执行更新任务并清空队列. 如果一个watcher 被触发多次, 只有最新的一次会被放进事件队列.

vue 对比 react

相同之处:

  1. 都使用 Virtual DOM
  2. 提供响应式和组件化
  3. 专注于核心, 将路由, 状态管理都交给其他的库

react 当某个组件的内容有更新, 将会以这个组件为根, 渲染这个组件之下的所有子组件, 如果希望避免不必要的更新, 那么需要手动实现shouldComponentUpdate方法
vue中, 组件的依赖是在渲染过程中自动追踪的,所以系统能精确知晓哪个组件确实需要被重渲染.

react中,jsx就是一切, html, css 都希望纳入到 javascript 中进行处理. 甚至一堆HTML标签组成的dom元素可以是一个变量, 可以随意使用.
vue则是更贴近传统的web开发, 从组件的模板就可以看出, 依旧是 html, css, js三板斧

<template>
  <div id="main">
  </div>
</template>
<script>
  export default {
  
  }
</script>
<style>
  *{}
</style>

vue提供了render函数, 甚至也支持jsx语法, 但是推荐还是使用 vue模板毕竟更快, 更契合vue

react的路由react-router, 状态管理redux, 都是由其社区维护的, react的社区比vue更加繁荣
vuevue-router, vuex都是由官方提供的. 社区方面相对来说没有 react 繁荣

react在原生方面 react-native 更加强大和成熟
vueweex 也正在逐步发展, 而且也是有世界上最大的电商服务需求在驱动, 同样也在蓬勃发展.

hash 模式和 history 模式的区别?

hash 模式依赖 window.onhashchange 事件, 每次触发此事件, 都将被浏览器记录, 于是前进后退就可以使用history.go(), history.back(), history.forward(), 当hash值发生改变, 不会触发网络请求, 刷新页面. 注意, hash的底层是用history实现的.

history 利用了HTML5 History Interface中新增的 pushState()replaceState()方法。(需要特定浏览器支持)
这两个方法应用于浏览器的历史记录栈,在当前已有的 back、forward、go 的基础之上,它们提供了对历史记录进行修改的功能。只是当它们执行修改时,虽然改变了当前的 URL,但浏览器不会立即向后端发送请求。


图截至segmentfaultJulian回答: https://segmentfault.com/q/1010000010340823/a-1020000010344787

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容