vue常见面试题(三)

vue常见面试题(三)
最新回答
孤独的王后

2022-04-03 15:46:03

Vue 常见面试题(三)25. axios 是什么?怎么使用?描述使用它实现登录功能的流程?

答案:axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 node.js,可以发送异步 HTTP 请求(如 GET、POST 等)到服务器。

使用方法

  • 安装:通过 npm 安装 axios,命令为 npm install axios -S。
  • 引入:在 JavaScript 文件中使用 import axios from 'axios' 引入。
  • 发送请求:使用 axios.get() 或 axios.post() 方法发送请求。
  • 处理响应:在 .then() 函数中处理成功响应,在 .catch() 函数中处理错误。

实现登录功能的流程

  1. 用户输入:用户在登录页面输入用户名和密码。
  2. 发送请求:使用 axios.post('/login', { username, password }) 发送登录请求到服务器。
  3. 服务器验证:服务器验证用户名和密码,返回验证结果。
  4. 处理响应

    如果验证成功,服务器通常会返回一个包含用户信息的 token。

    客户端将 token 存储在本地(如 localStorage),用于后续请求的身份验证。

    跳转到主页或显示登录成功信息。

  5. 处理错误:如果验证失败,显示错误信息,如用户名或密码错误。

跨域设置:如果请求是跨域的,需要在 vue.config.js 配置文件中设置代理。

26. keep-alive 是什么?

答案:keep-alive 是 Vue 内置的一个组件,用于包裹动态组件时,缓存不活动的组件实例,而不是销毁它们。这可以使被包含的组件保留状态,或避免重新渲染,从而提高性能。

27. 监听器 watch 的 6 个用法是什么?

答案

  1. 常见用法:直接监听某个数据属性的变化。
  2. 绑定方法(字符串):通过方法名(字符串形式)来指定监听器。
  3. deep + handler:深度监听对象内部属性的变化,但性能一般。
  4. immediate:监听器创建时立即执行一次,然后监听数据变化。
  5. 绑定多个 handler:虽然不常见,但技术上可以通过多次调用 Vue.watch() 来实现。
  6. 监听对象属性(性能比 deep 好):直接监听对象的某个具体属性,而不是整个对象。
28. 在 Vue 中怎么获取 DOM 节点?

答案:在元素上使用 ref 属性,如 ref="domName",然后在 Vue 实例中通过 this.$refs.domName 来访问该 DOM 节点。

29. Vue 为什么要求组件模板只能有一个根结点?

答案:Vue 组件最终是要被各种 loader 打包解析的,必须为 loader 指定一个入口。此外,模板最终会被编译成虚拟 DOM(vDOM),必须有一个根结点来递归遍历其子节点,渲染成一个“树”。

30. $nextTick 是什么?作用是什么?

答案:$nextTick 是在下次 DOM 更新循环结束之后执行延迟回调的方法。在修改数据之后使用它,可以在回调中获取更新后的 DOM。

31. 如何给 Vue 定义全局方法?

答案

  • 挂载到 Vue 的原型上:Vue.prototype.methodName = function(){}。
  • 使用 mixin:创建一个包含全局方法的 mixin,然后通过 Vue.use(mixin) 将其应用到 Vue 实例中。
32. 接口请求一般放在哪个生命周期里?

答案:接口请求一般放在 created 生命周期钩子中,因为此时组件实例已经被创建,可以进行数据请求。

33. 描述一下封装 Vue 组件的过程

答案:组件可以提升整个项目的开发效率,通过把页面抽象成多个相对独立的模块,解决传统项目开发中的效率低、难维护、复用性差等问题。

封装过程

  1. 使用 Vue.extend 方法创建一个组件构造器。
  2. 使用 Vue.component 方法注册组件,指定组件名和构造器。
  3. 子组件需要数据,可以在 props 中接受父组件传递的数据。
  4. 子组件修改好数据后,想把数据传递给父组件,可以采用 $emit 方法触发自定义事件。
34. 你用 npm 怎么安装、发布一个插件的?

答案

  • 安装插件:使用 npm install 插件名 --save 命令安装新插件。
  • 发布插件

    使用 npm adduser 登录 npm,添加用户名、密码和邮箱(需要先在 npm 官网注册好账号)。

    使用 npm publish 发布插件。

    在发布前,可以使用 npm config set registry

    https://registry.npmjs.org/
    修改 npm 仓库地址为官方仓库(如果之前修改过镜像)。

    如果需要卸载已发布的插件,可以使用 npm unpublish [包名] --force 命令。

35. 你用 Vue 怎么处理本地开发跨域问题?

答案:在 vue.config.js 配置文件中的 devServer 下配置 proxy 本地代理,将前端请求代理到后端服务器,从而解决跨域问题。

36. Vue CLI 项目中目录 src 中的文件夹分别是什么?用来做什么?

答案

  • assets:用来放置一些静态资源,如图片、字体图标等。
  • components:用来放置 Vue 组件,这些组件可以在其他组件或页面中复用。
  • router:用来放置一些路由相关的配置,如定义路由规则、设置路由守卫等。
  • App.vue:根组件,是整个 Vue 应用的入口组件。
  • main.js:入口文件,用于初始化 Vue 实例,挂载根组件,并引入全局资源(如路由、插件等)。
37. v-model 的原理是什么?

答案:v-model 只是一个语法糖,其内部实现原理就是使用 v-bind 绑定值,并使用 input 事件监听值的改变。当输入框的值发生变化时,会触发 input 事件,从而更新绑定的数据。

38. 使用 Vue 后怎么针对搜索引擎做 SEO 优化?

答案

  • SSR(服务端渲染):使用 Nuxt.js 等框架实现服务端渲染,使搜索引擎能够抓取到完整的 HTML 内容。
  • 预渲染:使用 prerender-spa-plugin 等插件对 Vue 应用进行预渲染,生成静态 HTML 文件。
39. Vue 怎么扩展组件?

答案

  • Vue.mixin:全局混入,可以影响所有组件的行为。
  • Vue.extend:创建一个可复用的组件构造器,用于生成具有特定选项的新组件。
  • Slot:插槽机制,允许父组件向子组件传递模板内容。
40. Vue 模板编译原理是什么?

答案:Vue 的编译过程就是将 template 转化为 render 函数的过程。会经历以下阶段:

  1. 生成 AST 树:解析模板,生成 AST(抽象语法树),用 JavaScript 对象的形式来描述整个模板。
  2. 优化:深度遍历 AST 树,按照相关条件对树节点进行标记。这些被标记的节点(静态节点)在后续的比对中可以被跳过,从而优化性能。
  3. codegen:将优化后的 AST 树转换为可执行的代码,即 render 函数。

在这个过程中,Vue 使用大量的正则表达式对模板进行解析,遇到标签、文本等都会执行对应的钩子进行相关处理。Vue 的数据是响应式的,但模板中并不是所有的数据都是响应式的。通过编译过程中的优化,可以进一步提高 Vue 应用的性能。