vue面试题(二)

简介: vue面试题

1=> Vue3.0 和 2.0 的【响应式原理】区别


Vue3.x 改用 Proxy[pu luo k she] 替代 Object.defineProperty[di fai n prɒ pə ti]。


因为 Proxy 可以直接监听对象和数组的变化,


而Object.defineProperty是不可以直接对【数组】进行监听


Vue2 中修改数组的索引和长度无法被监控到。


对象新增的属性无法被Object.defineProperty监听到


2=> Vuex 页面刷新数据丢失怎么解决?


在刷新页面的时候,将vuex中的只存在本地


也可以使用第三方插件。  vuex-persist (pəˈsɪ s t])插件,


它是为 Vuex 持久化储存而生的一个插件。


3 你都做过哪些 Vue 的性能优化?


语法方面:


v-if 和 v-show 区分使用场景


computed 和 watch 区分场景使用


v-for 遍历必须加 key,key最好是id值,且避免同时使用 v-if


//数据方面


对象层级不要过深,否则性能就会差。


不需要响应式的数据不要放在 data 中(可以使用 Object.freeze() 冻结数据)


// 加载-缓存


路由懒加载


第三方插件的按需加载


适当采用 keep-alive 缓存组件


防抖、节流的运用


4 Vue.mixin 的使用场景和原理


在开发的过程中我们会遇见相同或者相似的逻辑代码。


可以通过vue的 mixin 功能抽离公共的业务逻辑,


然后通过impor再组件中引入。通过mixins注册进来。


这样我们就可以使用mixin中共同的业务逻辑


<script>
import { mixinmethods} from "../mixin.js"
    export default {
        // mixins是固定的,里面传入一个数组
        mixins:[mixinmethods]
    }
</script>


如果组件中data数据与混合中的数据重复,会进行合并。使用data中的数据。


【组件中是可以直接使用混合中的数据的,自己理解】


需要注意的是:声明周期不会进行合并


如果你在混合中使用了生命周期,组件中也是用生命周期。


组件和混合中的生命周期都会被执行。


5. nextTick 使用场景和原理


场景:当组件使用v-if进行显示和销毁时,值为true的时候。


立刻获取组件的实例,就会出现undefiend


为什么会出现undefined?


Vue 实现响应式并不是数据发生变化之后 DOM 立即变化,而是按一定的策略进行 DOM 的更新。


原理:


nextTick 将回调延迟到下次 DOM 更新循环之后执行


6、 keep-alive 使用场景和原理


keep-alive 是 Vue 内置的一个组件,可以实现组件缓存,当组件切换时不会对当前组件进行卸载。


常用的两个属性 include/exclude,符合条件的组件或者页面进行缓存。 [include 是页面中的name ]


include的类型可以是字符串,数组,正则。


两个生命周期 activated/deactivated,用来得知当前组件是否处理活跃状态。


keep-alive 运用了 LRU 算法,选择最近【久未使用的组件】予以淘汰。


keep-alive其实还有一个属性max, 最大允许缓存多少个,如果超出最大个数。


会将已缓存组件中最久没有被访问的实例会被销毁掉。


[exs k lu d] exclude 排除


7、Vue.set 方法原理


在两种情况下修改 Vue 是不会触发视图更新的。  


1、给响应式对象新增属性,这个时候是不会跟新视图的


2、直接更改【数组下标】来修改数组的值。


我们可以通过 Vue.set(this.userInfo, 'sex' ,'男')  


或者 this.$forceUpdate() 来解决这个问题


set 原理如下


因为是响应式数据,


我们给对象和数组本身新增了__ob__属性,代表的是 Observer【饿 b zɜ və(r)】 实例。


如对象新增不存在的属性,首先会把新的属性进行响应式跟踪。


当数据发生变化后,watcher【ˈwɑːtʃər]】 去更新视图.


【使用splice方法向数组内添加元素时】该元素会自动被变成响应式的


源码:https://blog.csdn.net/leelxp/article/details/107212555


8 assets 和static【不会打包】的区别


答:相同点:assets【a sai s 】和static两个都是存放静态资源文件,


图片,字体图标,都可以放在这两个文件下。


不相同点:


build的时候会将assets中放置的静态资源文件【会进行】打包压缩上传.


最终会放置在static中跟着index.html一同上传至服务器。


static中放置的静态资源文件就【不会】打包压缩


建议:将项目中样式文件js文件等都可以放置在assets中,


走打包这一流程。减少体积。


而项目中引入的第三方的资源文件如iconfoont.css等文件可以放置在static中,


因为这些引入的第三方文件已经经过处理,我们不再需要处理,直接上传。


巧计:听读音, assets 有压缩。


明天继续看-------------------

相关文章
|
JavaScript 前端开发 应用服务中间件
【Vue面试题三十】、vue项目本地开发完成后部署到服务器后报404是什么原因呢?
这篇文章分析了Vue项目在服务器部署后出现404错误的原因,主要是由于history路由模式下服务器缺少对单页应用的支持,并提供了通过修改nginx配置使用`try_files`指令重定向所有请求到`index.html`的解决方案。
【Vue面试题三十】、vue项目本地开发完成后部署到服务器后报404是什么原因呢?
|
JavaScript
【Vue面试题十五】、说说你对slot的理解?slot使用场景有哪些?
这篇文章深入探讨了Vue中的`slot`概念,包括它的定义、使用场景和分类(默认插槽、具名插槽和作用域插槽),并通过代码示例展示了如何在组件中使用插槽来实现内容的分发和自定义。同时,文章还对插槽的工作原理进行了分析,解释了`renderSlot`函数和`$scopedSlots`对象的角色。
【Vue面试题十五】、说说你对slot的理解?slot使用场景有哪些?
|
JavaScript 前端开发
【Vue面试题二十五】、你了解axios的原理吗?有看过它的源码吗?
这篇文章主要讨论了axios的使用、原理以及源码分析。 文章中首先回顾了axios的基本用法,包括发送请求、请求拦截器和响应拦截器的使用,以及如何取消请求。接着,作者实现了一个简易版的axios,包括构造函数、请求方法、拦截器的实现等。最后,文章对axios的源码进行了分析,包括目录结构、核心文件axios.js的内容,以及axios实例化过程中的配置合并、拦截器的使用等。
【Vue面试题二十五】、你了解axios的原理吗?有看过它的源码吗?
|
JavaScript 前端开发 数据处理
【Vue面试题二十八】、vue要做权限管理该怎么做?如果控制到按钮级别的权限怎么做?
这篇文章讨论了Vue中实现权限管理的策略,包括接口权限、路由权限、菜单权限和按钮权限的控制方法,并提供了不同的实现方案及代码示例,以确保用户只能访问被授权的资源。
【Vue面试题二十八】、vue要做权限管理该怎么做?如果控制到按钮级别的权限怎么做?
|
JavaScript 前端开发
【Vue面试题二十七】、你了解axios的原理吗?有看过它的源码吗?
文章讨论了Vue项目目录结构的设计原则和实践,强调了项目结构清晰的重要性,提出了包括语义一致性、单一入口/出口、就近原则、公共文件的绝对路径引用等原则,并展示了单页面和多页面Vue项目的目录结构示例。
|
缓存 JavaScript 前端开发
vue面试题
vue面试题
269 64
|
JavaScript 安全 前端开发
【Vue面试题二十九】、Vue项目中你是如何解决跨域的呢?
这篇文章介绍了Vue项目中解决跨域问题的方法,包括使用CORS设置HTTP头、通过Proxy代理服务器进行请求转发,以及在vue.config.js中配置代理对象的策略。
【Vue面试题二十九】、Vue项目中你是如何解决跨域的呢?
|
JavaScript 前端开发 编译器
【Vue面试题三十二】、vue3有了解过吗?能说说跟vue2的区别吗?
这篇文章介绍了Vue 3相对于Vue 2的改进和新增特性,包括性能提升、体积减小、更易维护、更好的TypeScript支持、新的Composition API、新增的Teleport和createRenderer功能,以及Vue 3中的非兼容性变更和API的移除或重命名。
【Vue面试题三十二】、vue3有了解过吗?能说说跟vue2的区别吗?
|
JavaScript 前端开发
vue尚品汇商城项目-day01【8.路由跳转与传参相关面试题】
vue尚品汇商城项目-day01【8.路由跳转与传参相关面试题】
142 0
vue尚品汇商城项目-day01【8.路由跳转与传参相关面试题】
|
JavaScript 前端开发 API
【Vue面试题三十一】、你是怎么处理vue项目中的错误的?
这篇文章讨论了Vue项目中错误的处理方式,包括后端接口错误和代码逻辑错误的处理策略。文章详细介绍了如何使用axios的拦截器处理后端接口错误,以及Vue提供的全局错误处理函数`errorHandler`和生命周期钩子`errorCaptured`来处理代码中的逻辑错误。此外,还分析了Vue错误处理的源码,解释了`handleError`、`globalHandleError`、`invokeWithErrorHandling`和`logError`函数的作用和处理流程。
【Vue面试题三十一】、你是怎么处理vue项目中的错误的?