推广

Vue面试题总结

iseeyu2年前 (2024-02-21)推广120

生命周期图示

在哪个生命周期内调用异步请求?

可以在钩子函数 created、beforeMount、mounted 中进行调用,因为在这三个钩子函数中,data 已经创建,可以将服务端端返回的数据进行赋值。

推荐在 created 钩子函数中调用异步请求,因为在 created 钩子函数中调用异步请求有以下优点:

  • 能更快获取到服务端数据,减少页面 loading 时间;
  • ssr 不支持 beforeMount 、mounted 钩子函数,所以放在 created 中有助于一致性;

在什么阶段才能访操作DOM?

在钩子函数 mounted 被调用前,Vue 已经将编译好的模板挂载到页面上,所以在 mounted 中可以访问操作 DOM

父组件可以监听到子组件的生命周期吗?

可以通过@hook来监听生命周期事件,用法如下:

//  Parent.vue
<Child @hook:mounted="doSomething" ></Child>

doSomething() {
   console.log('父组件监听到 mounted 钩子函数 ...');
},
    
//  Child.vue
mounted(){
   console.log('子组件触发 mounted 钩子函数 ...');
},    
    
// 以上输出顺序为:
// 子组件触发 mounted 钩子函数 ...
// 父组件监听到 mounted 钩子函数 ...     

谈谈你对 keep-alive 的了解? (详解)

keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,避免重新渲染 ,其有以下特性:
一般结合路由和动态组件一起使用,用于缓存组件

提供 include 和 exclude 属性,两者都支持字符串或正则表达式, include 表示只有名称匹配的组件会被缓存,exclude 表示任何名称匹配的组件都不会被缓存 ,其中 exclude 的优先级比 include 高;

对应两个钩子函数 activated 和 deactivated ,当组件被激活时,触发钩子函数 activated,当组件被移除时,触发钩子函数 deactivated。

组件中 data 为什么是一个函数?

因为组件是用来复用的,且 JS 里对象是引用关系,如果组件中 data 是一个对象,那么这样作用域没有隔离,子组件中的 data 属性值会相互影响,如果组件中 data 选项是一个函数,那么每个实例可以维护一份被返回对象的独立的拷贝,组件实例之间的 data 属性值不会互相影响;而 new Vue 的实例,是不会被复用的,因此不存在引用对象的问题。

vue-router 路由模式有几种?

vue-router 有 3 种路由模式:hash、history、abstract,对应的源码如下所示:

switch (mode) {
  case 'history':
    this.history = new HTML5History(this, options.base)
    break
  case 'hash':
    this.history = new HashHistory(this, options.base, this.fallback)
    break
  case 'abstract':
    this.history = new AbstractHistory(this, options.base)
    break
  default:
    if (process.env.NODE_ENV !== 'production') {
      assert(false, `invalid mode: ${mode}`)
    }
}

hash: 使用 URL hash 值来作路由。支持所有浏览器,包括不支持 HTML5 History Api 的浏览器;

history : 依赖 HTML5 History API 和服务器配置。具体可以查看 HTML5 History 模式;

abstract : 支持所有 JavaScript 运行环境,如 Node.js 服务器端。如果发现没有浏览器的 API,路由会自动强制进入这个模式.

vuex有哪几种状态和属性 (详解)

  • state中保存着共有数据,数据是响应式的
  • getter可以对state进行计算操作,主要用来过滤一些数据,可以在多组件之间复用
  • mutations定义的方法动态修改state中的数据,通过commit提交方法,方法必须是同步的
  • actions将mutations里面处理数据的方法变成异步的,就是异步操作数据,通store.dispatch来分发actions,把异步的方法写在actions中,通过commit提交mutations,进行修改数据。
  • modules:模块化vuex

vue修饰符

  • stop:阻止事件的冒泡
  • prevent:阻止事件的默认行为
  • once:只触发一次
  • self:只触发自己的事件行为时,才会执行

Vue实现数据双向绑定的原理:Object.defineProperty()

vue实现数据双向绑定主要是:采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应监听回调。当把一个普通 Javascript 对象传给 Vue 实例来作为它的 data 选项时,Vue 将遍历它的属性,用 Object.defineProperty 将它们转为 getter/setter。用户看不到 getter/setter,但是在内部它们让 Vue 追踪依赖,在属性被访问和修改时通知变化。

vue的数据双向绑定 将MVVM作为数据绑定的入口,整合Observer,Compile和Watcher三者,通过Observer来监听自己的model的数据变化,通过Compile来解析编译模板指令(vue中是用来解析 {{}}),最终利用watcher搭起observer和Compile之间的通信桥梁,达到数据变化 —>视图更新;视图交互变化(input)—>数据model变更双向绑定效果。

说说对v-model的了解?

v-model本质就是一个语法糖,可以看成是value + input方法的语法糖。 可以通过model属性的prop和event属性来进行自定义。原生的v-model,会根据标签的不同生成不同的事件和属性。

我们在 vue 项目中主要使用 v-model 指令在表单 input、textarea、select 等元素上创建双向数据绑定,我们知道 v-model 本质上不过是语法糖,v-model 在内部为不同的输入元素使用不同的属性并抛出不同的事件:
text 和 textarea 元素使用 value 属性和 input 事件;
checkbox 和 radio 使用 checked 属性和 change 事件;
select 字段将 value 作为 prop 并将 change 作为事件。

以 input 表单元素为例:

<input v-model='something'>

相当于

<input v-bind:value="something" v-on:input="something = $event.target.value">

如果在自定义组件中,v-model 默认会利用名为 value 的 prop 和名为 input 的事件,如下所示:
父组件:

<Child v-model="message"></Child>

子组件

<div>{{value}}</div>

props:{
    value: String
},
methods: {
  test1(){
     this.$emit('input', '小红')
  },
}

Vue 项目优化

1.代码层面的优化
v-if 和 v-show 区分使用场景
computed 和 watch 区分使用场景
v-for 遍历必须为 item 添加 key,且避免同时使用 v-if
长列表性能优化
事件的销毁
图片资源懒加载
路由懒加载
第三方插件的按需引入
优化无限列表性能
服务端渲染 SSR or 预渲染

2.Webpack 层面的优化
Webpack 对图片进行压缩
减少 ES6 转为 ES5 的冗余代码
提取公共代码
模板预编译
提取组件的 CSS
优化 SourceMap
构建结果输出分析
Vue 项目的编译优化

3.基础的 Web 技术的优化
开启 gzip 压缩
浏览器缓存
CDN 的使用
使用 Chrome Performance 查找性能瓶颈

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://www.0291.com.cn/post/57332.html

相关文章

在防御服务器中如何防范DDoS流量攻击。

在防御服务器中如何防范DDoS流量攻击。

随着互联网的快速发展,互联网生态越来越混乱,流量攻击也越来越频繁。无论是正规的企业网站、棋牌游戏网站、电子商务网站还是娱乐网站,很多站长都因各种网络攻击而导致网站崩溃,被迫切断网络,使正常用户无法访问,造成重大损失。为了解决这些问题,先进的防御服务器应运而生。然而,市场上有许多先进的防御服务器提供商...

分享塔城网站建设可以借鉴模仿但知道“所以然”才是根本。

分享塔城网站建设可以借鉴模仿但知道“所以然”才是根本。

    无论是学校里面的练习题目,还是毕业后走向社会的第一个项目,设计师们第一次接触网站建设,多半从模仿和借鉴开始。即便在很多成熟的塔城网站建设公司,很多设计师在帮客户设计制作网站时,也会从其它优秀的网站中汲取灵感。这是自然且正常的事情,但是也有一些不可称道的做法,比如很多设计师...

能量守恒的解释和实例

能量守恒的解释和实例

说在前面,现在还在准备发一些新的东西,以前发的有些模糊,不明了,以后会重新发写了很长时间,都是比较粗略的介绍,以后都会详细讲,希望可以认真看完能量守恒: 很多人对于能量守恒可能有些模糊,所以会产生一些不切实际的想法,或不相信一些存在的东西,现在我说明一下能量守恒,举几个例子...

看了100个抖音游戏视频后,我总结了6点短视频买量思路

看了100个抖音游戏视频后,我总结了6点短视频买量思路

随着抖音在短时间内的快速崛起,越来越多的人开始将目光投向了“短视频”这个巨大的风口。如果说之前的快手热还主要集中在三四线城市以及农村等消费力不强的用户群体上,没能有力的抓住主流用户的眼光;那么如今在一二线城市大放异彩的抖音让厂商们再也无法无视短视频对于用户的吸引力。 有了短视频这一全新...

玩转B站效果广告的3个投放策略

玩转B站效果广告的3个投放策略

开始之前我们先聊聊B站营销的商业价值。 1.用户增长势头很猛:截止 2020 年 Q1,月活用户超过 1.72 亿,同比增长70%;月均活跃 UP 主达到 180 万人,同比增长 146%,拥有万粉以上 UP 主数量同比增长 82%。 2.用户的年轻化及超高的用户粘性:根据中国20...

【揭秘】拼多多百度云资源,让你轻松玩转网购的神器!

【揭秘】拼多多百度云资源,让你轻松玩转网购的神器!

如今,网购已经成为我们生活中不可或缺的一部分。而在众多电商平台中,拼多多无疑是其中的一匹“黑马”。那么,如何才能在拼多多这个“宝藏”平台上挖到心仪的宝贝呢?别急,今天我将为你揭秘拼多多百度云资源,让你轻松玩转网购,尽享购物的乐趣! 一、拼多多百度云资源是什么? 拼多多百度云资源,顾...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片