vue综合指南(四)_前端

🌈个人主页:前端青山 🔥系列专栏:Vue篇
🔖人终将被年少不可得之物困其一生

依旧青山,本期给大家带来Vuet篇专栏内容:vue综合指南

目录

61、SPA首屏加载慢如何解决

62、Vue-router跳转和location.href有什么区别

63、vue slot

64、如果你是leader,做管理系统项目 Vue和React 怎么选择

65、Vuex的缺点

66、Vue和React区别

67、你们vue项目是打包了一个js文件,一个css文件,还是有多个文件?

68、Vue里面router-link在电脑上有用,在安卓上没反应怎么解决?

69、Vue2中注册在router-link上事件无效解决方法

70、RouterLink在IE和Firefox中不起作用(路由不跳转)的问题

71、axios的特点有哪些

72、Vue深层次嵌套传值方法

73、请说下封装 vue 组件的过程?

74、params和query的区别

75、vue初始化页面闪动问题

76、vue更新数组时触发视图更新的方法

77、vue常用的UI组件库

78、vue修改打包后静态资源路径的修改

79、什么是 vue 生命周期?有什么作用?

80、第一次页面加载会触发哪几个钩子?


61、SPA首屏加载慢如何解决

安装动态懒加载所需插件;使用CDN资源。

62、Vue-router跳转和location.href有什么区别

使用location.href='/url'来跳转,简单方便,但是刷新了页面; 使用history.pushState('/url'),无刷新页面,静态跳转; 引进router,然后使用router.push('/url')来跳转,使用了diff算法,实现了按需加载,减少了dom的消耗。 其实使用router跳转和使用history.pushState()没什么差别的,因为vue-router就是用了history.pushState(),尤其是在history模式下。

63、vue slot

简单来说,假如父组件需要在子组件内放一些DOM,那么这些DOM是显示、不显示、在哪个地方显示、如何显示,就是slot分发负责的活。

64、如果你是leader,做管理系统项目 Vue和React 怎么选择

Angular的极限面向对象处理复杂业务非常舒适,但是对于轮子兄弟极其不友好,没有CDK你就只能抓瞎,一句话:高楼大厦,攀登不易。

React的Hooks有很强的Hacky精神,零星几个API,绝大部分需求皆可实现,一句话:步步为营,跬步千里。

Vue的API数量适中,基础设施完善,文档友好,概念与Angular和React都互通,一句话:百家之长,指哪打哪。

65、Vuex的缺点

如果您不打算开发大型单页应用,使用 Vuex 可能是繁琐冗余的。确实是如此——如果您的应用够简单,您最好不要使用 Vuex。一个简单的 store 模式就足够您所需了。

66、Vue和React区别

react和vue都是做组件化的,整体的功能都类似,但是他们的设计思路是有很多不同的。使用react和vue,主要是理解他们的设计思路的不同。

1.数据是不是可变的

react整体是函数式的思想,把组件设计成纯组件,状态和逻辑通过参数传入,所以在react中,是单向数据流,推崇结合immutable来实现数据不可变。react在setState之后会重新走渲染的流程,如果shouldComponentUpdate返回的是true,就继续渲染,如果返回了false,就不会重新渲染,PureComponent就是重写了shouldComponentUpdate,然后在里面作了props和state的浅层对比。

vue综合指南(四)_前端_02

image.png

而vue的思想是响应式的,也就是基于是数据可变的,通过对每一个属性建立Watcher来监听,当属性变化的时候,响应式的更新对应的虚拟dom。

vue综合指南(四)_前端_03

image.png

总之,react的性能优化需要手动去做,而vue的性能优化是自动的,但是vue的响应式机制也有问题,就是当state特别多的时候,Watcher也会很多,会导致卡顿,所以大型应用(状态特别多的)一般用react,更加可控。

2.通过js来操作一切,还是用各自的处理方式

react的思路是all in js,通过js来生成html,所以设计了jsx,还有通过js来操作css,社区的styled-component、jss等,

vue综合指南(四)_vue.js_04

image.png

vue是把html,css,js组合到一起,用各自的处理方式,vue有单文件组件,可以把html、css、js写到一个文件中,html提供了模板引擎来处理。

vue综合指南(四)_javascript_05

image.png

3.类式的组件写法,还是声明式的写法

react是类式的写法,api很少,

vue综合指南(四)_vue.js_06

image.png

而vue是声明式的写法,通过传入各种options,api和参数都很多。所以react结合typescript更容易一起写,vue稍微复杂。

vue综合指南(四)_开发语言_07

image.png

vue结合vue-class-component也可以实现类式的写法,但是还是需要通过decorator来添加声明,并不纯粹。

vue综合指南(四)_javascript_08

image.png

react可以通过高阶组件(Higher Order Components--HOC)来扩展,而vue需要通过mixins来扩展 一个react高阶组件的例子:

vue综合指南(四)_javascript_09

image.png

vue综合指南(四)_开发语言_10

image.png

vue的mixin的例子:

vue综合指南(四)_前端框架_11

image.png

React刚开始也有mixin的写法,通过React.createClass的api,不过现在很少用了。 Vue也不是不能实现高阶组件,只是特别麻烦,因为Vue对与组件的option做了各种处理,想实现高阶组件就要知道每一个option是怎么处理的,然后正确的设置。具体有多复杂,可以参考下面的文章。 http://hcysun.me/2018/01/05/%E6%8E%A2%E7%B4%A2Vue%E9%AB%98%E9%98%B6%E7%BB%84%E4%BB%B6/

4.什么功能内置,什么交给社区去做

react做的事情很少,很多都交给社区去做,vue很多东西都是内置的,写起来确实方便一些, 比如 redux的combineReducer就对应vuex的modules, 比如reselect就对应vuex的getter和vue组件的computed, vuex的mutation是直接改变的原始数据,而redux的reducer是返回一个全新的state,所以redux结合immutable来优化性能,vue不需要。

总结

上面主要梳理了react和vue的4点不同:

  1. 数据是不是可变的
  2. 通过js操作一切还是各自的处理方式
  3. 类式的组件写法还是声明式的写法
  4. 什么功能内置,什么交给社区去做

(其中第3点在vue3.0支持类式写法之后就可以去掉了)

react整体的思路就是函数式,所以推崇纯组件,数据不可变,单向数据流,当然需要双向的地方也可以做到,比如结合redux-form,而vue是基于可变数据的,支持双向绑定。react组件的扩展一般是通过高阶组件,而vue组件会使用mixin。vue内置了很多功能,而react做的很少,很多都是由社区来完成的,vue追求的是开发的简单,而react更在乎方式是否正确。

vue综合指南(四)_前端框架_12

image.png

vue综合指南(四)_vue.js_13

67、你们vue项目是打包了一个js文件,一个css文件,还是有多个文件?

根据vue-cli脚手架规范,一个js文件,一个CSS文件。

68、Vue里面router-link在电脑上有用,在安卓上没反应怎么解决?

Vue路由在Android机上有问题,babel问题,安装babel polypill插件解决。

69、Vue2中注册在router-link上事件无效解决方法

使用@click.native。原因:router-link会阻止click事件,.native指直接监听一个原生事件。

70、RouterLink在IE和Firefox中不起作用(路由不跳转)的问题

方法一:只用a标签,不适用button标签;方法二:使用button标签和Router.navigate方法

71、axios的特点有哪些

浏览器中创建XMLHttpRequests; node.js创建http请求; 支持Promise API; 拦截请求和响应; 转换请求数据和响应数据; 取消请求; 自动换成json。 axios中的发送字段的参数是data跟params两个,两者的区别在于params是跟请求地址一起发送的,data的作为一个请求体进行发送 params一般适用于get请求,data一般适用于post put 请求。

72、Vue深层次嵌套传值方法

vuex

73、请说下封装 vue 组件的过程?

\1. 建立组件的模板,先把架子搭起来,写写样式,考虑好组件的基本逻辑。(os:思考1小时,码码10分钟,程序猿的准则。)

  1. 准备好组件的数据输入。即分析好逻辑,定好 props 里面的数据、类型。
  2. 准备好组件的数据输出。即根据组件逻辑,做好要暴露出来的方法。
  3. 封装完毕了,直接调用即可

74、params和query的区别

用法:query要用path来引入,params要用name来引入,接收参数都是类似的,分别是this.$和this.$route.params.name。 url地址显示:query更加类似于我们ajax中get传参,params则类似于post,说的再简单一点,前者在浏览器地址栏中显示参数,后者则不显示 注意点:query刷新不会丢失query里面的数据 params刷新 会 丢失 params里面的数据。

75、vue初始化页面闪动问题

使用vue开发时,在vue初始化之前,由于div是不归vue管的,所以我们写的代码在还没有解析的情况下会容易出现花屏现象,看到类似于{{message}}的字样,虽然一般情况下这个时间很短暂,但是我们还是有必要让解决这个问题的。 首先:在css里加上[v-cloak] { display: none; }。 如果没有彻底解决问题,则在根元素加上style="display: none;" :style="{display: 'block'}"

76、vue更新数组时触发视图更新的方法

push();pop();shift();unshift();splice(); sort();reverse()

77、vue常用的UI组件库

Mint UI,element,VUX

78、vue修改打包后静态资源路径的修改

cli2版本:将 config/index.js 里的 assetsPublicPath 的值改为 './' 。 build: { ... assetsPublicPath: './', ... } cli3版本:在根目录下新建vue.config.js 文件,然后加上以下内容:(如果已经有此文件就直接修改) module.exports = { publicPath: '', // 相对于 HTML 页面(目录相同) } 生命周期函数面试题

79、什么是 vue 生命周期?有什么作用?

每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做 生命周期钩子 的函数,这给了用户在不同阶段添加自己的代码的机会。(ps:生命周期钩子就是生命周期函数)例如,如果要通过某些插件操作DOM节点,如想在页面渲染完后弹出广告窗, 那我们最早可在mounted 中进行。

80、第一次页面加载会触发哪几个钩子?

beforeCreate, created, beforeMount, mounted