首页 > 其他分享 >前端面试题合集(一)

前端面试题合集(一)

时间:2024-12-11 16:30:35浏览次数:5  
标签:面试题 Vue DOM 数据 前端 绑定 Vuex 组件 合集

1、说说你对vue的理解

Vue是一个用于构建用户界面的渐进式JavaScript框架。
它的核心是通过组件化的方式来开发界面。就像是搭积木,每个组件都是一块有特定功能的积木,例如一个导航栏组件、一个按钮组件。这些组件可以被复用,大大提高了开发效率。 在数据绑定方面,Vue使用了双向数据绑定。这意味着当数据发生变化时,与之绑定的DOM(文档对象模型)会自动更新;反过来,当用户在页面上操作(如输入框输入内容),数据也会相应改变。例如一个输入框绑定了一个变量,在输入框输入新内容,这个变量的值就会跟着改变。 Vue还提供了虚拟DOM(Document Object Model)。它是真实DOM的一个轻量级副本,当数据变化时,Vue先在虚拟DOM上进行对比和更新计算,然后再将最小的变更应用到真实DOM,这样能有效减少DOM操作,提升页面性能。

关于 Vue 3
Vue 3 于2020年9月18日正式发布。
Vue 3 是一个用于构建用户界面的渐进式 JavaScript 框架。它对 Vue 2 进行了重大改进,包括:
(1)更快的性能: Vue 3 使用更快的虚拟 DOM 算法和更优化的代码生成。
(2)更好的代码组织: Vue 3 引入了 composition API,允许更高效且可复用的代码组织。
(3)更大的可扩展性: Vue 3 具有更好的可扩展性,使其能够轻松地与其他库集成。
(4)更小的捆绑大小: Vue 3 具有更小的捆绑大小,有助于提高加载速度。
更强的类型支持: Vue 3 增加了对 TypeScript 的更好支持,使代码更容易维护。

2、Vue和React有什么区别?

Vue和React都是流行的JavaScript库,用于构建用户界面,它们有以下区别:

学习曲线

  • Vue:相对容易学习。它的API设计比较直观,模板语法与HTML相似,开发者容易上手,对于初学者更友好。
  • React:学习曲线稍陡。需要理解如JSX(JavaScript XML)语法、虚拟DOM的概念和组件生命周期等知识,不过掌握之后能灵活开发。

数据绑定

  • Vue:使用双向数据绑定,数据和DOM之间的交互更自动化。例如在表单元素和数据之间建立绑定后,修改数据会更新视图,用户在表单操作也会更新数据。
  • React:主要是单向数据绑定。数据从父组件流向子组件,通过调用 setState 方法来更新状态,引起UI的重新渲染。

组件化

  • Vue:组件是通过对象的方式定义,包含模板(template)、脚本(script)和样式(style),可以把一个组件的这三部分放在一起,易于理解和维护。
  • React:组件是通过类(class)或者函数(function)来定义,在大型项目中,函数式组件配合React Hooks可以更灵活地组织逻辑。

生态系统

  • Vue:有一套完整的生态系统,包括Vue Router(路由)、Vuex(状态管理)等官方库,这些库与Vue核心库紧密集成,容易学习和使用。
  • React:生态系统更丰富多样,有许多第三方库可用于状态管理(如Redux)、路由(如React Router)等,提供了更多的选择,但也增加了选择成本。

3、vue的双向数据绑定是怎么实现的?

在Vue中,双向数据绑定是一个重要的特性。
它主要是通过 v - model 指令来实现的。这个指令可以用在表单元素(如 input 、 select 、 textarea )上。当用户在表单元素中输入内容或者修改选项时,数据会自动更新到Vue实例中的数据属性;反之,当Vue实例中的数据属性发生变化时,表单元素展示的值也会随之更新。 例如,有一个简单的Vue实例:

new Vue({ el: '#app', data: { message: 'Hello' } });  
<div id="app"> 
  <input v-model="message">
  <p>{{message}}</p>
</div>

// 在这个例子中, input 框中的内容和 message 数据是双向绑定的。
// 当你在 input 框中修改文字时, <p> 标签中显示的 message 内容也会同步变化;
// 同样,如果通过代码改变 message 的值, input 框中的文字也会改变。 
// 其原理是Vue.js使用了 Object.defineProperty() 方法来进行数据劫持创建响应式数据。
// 当数据变化时,Vue能够监听到变化,并且更新与之绑定的DOM元素;
// 而用户操作表单元素修改数据时,也会触发对应的更新机制。

除了v-model指令,Vue还有哪些数据绑定方式?
单向数据绑定

  • 插值表达式(Mustache语法):使用双大括号 {{}} ,可以将Vue实例中的数据渲染到DOM中。例如, <p>{{message}}</p> ,这里的 message 是Vue实例 data 对象中的一个属性。它是单向的,数据从 data 流向DOM,当 message 的值改变时,DOM中的文本会相应更新,但DOM中的修改不会影响 data 中的 message 值。

v - bind 指令

  • 主要用于绑定HTML属性。比如绑定 src 属性 <img v-bind:src="imageUrl"> ,或者绑定 class 属性来动态添加类名 <div v-bind:class="{active: isActive}"></div> 。这里 imageUrl 和 isActive 都是Vue实例 data 中的属性。这也是单向数据绑定,数据从 data 流向DOM属性。

4、vue组件之间怎么通信?

(1) 父子组件通信

  • 属性绑定(Props):父组件通过 props 向子组件传递数据。在父组件的模板中,将数据作为属性传递给子组件,像 <child-component :data="parentData"></child-component> 。在子组件中,通过 props 选项接收数据,例如 props: ['data']
  • 自定义事件(emit):子组件通过emit 触发事件来向父组件传递消息。比如在子组件中有个按钮,点击按钮时,子组件使用 this.$emit('custom-event', data) 来触发一个自定义事件 custom-event ,同时可以传递一些数据 data 。父组件在使用子组件时,可以通过 v-on 监听这个事件,像 <child-component v-on:custom-event="handleEvent">handleEvent是父组件中定义的处理这个事件的方法。

(2) 兄弟组件通信

  • 通过共同的父组件通信:兄弟组件A和B有共同的父组件C。A组件通过 $emit 向父组件C发送事件和数据,父组件C接收后,将数据通过 props 传递给B组件。

(3)任意组件之间通信(非父子、非兄弟)

  • 事件总线(EventBus):创建一个Vue实例作为事件总线,例如 const eventBus = new Vue(); 。在发送数据的组件中使用 eventBus.$emit('eventName', data) 发送事件和数据,在接收数据的组件中通过 eventBus.$on('eventName', callback) 来监听事件并在回调函数 callback 中处理数据。不过这种方式在大型项目中管理起来比较复杂。
  • 状态管理模式(Vuex):如果应用有多个组件需要共享状态,使用Vuex。Vuex有一个全局的状态存储,组件可以通过 dispatch 来触发 actionsactions 可以提交 mutations 来修改 state ,组件还可以通过getters state 获取数据。

总结vue中8种常规的通信方案

  1. 通过 props 传递
  2. 通过 $emit 触发自定义事件
  3. 使用 ref
  4. EventBus
  5. parent或root
  6. attrs 与 listeners
  7. Provide 与 Inject
  8. Vuex

5、Pinia和Vuex有什么区别?

PiniaVuex都是Vue.js的状态管理工具,有以下区别:

设计理念

  • Vuex:基于Flux架构,有严格的规则,如规定了mutation是更改状态的唯一途径,这样的设计理念使得状态的变化可预测。
  • Pinia:它的设计更注重简单性和直观性,充分利用了Vue 3的新特性,减少了模板代码,提供了更接近Vue 3组合式API风格的开发体验。

API复杂度

  • Vuex:有比较复杂的概念,如state、mutations、actions和getters,它们各自承担不同职责。例如,mutations用于同步修改状态,actions用于处理异步操作。
  • Pinia:API相对简单,主要通过 defineStore 函数定义一个store,在store里可以直接操作state,不需要像Vuex那样区分mutations和actions来修改状态,使得代码更加简洁。

类型支持

  • Vuex:对TypeScript的支持需要额外的配置和复杂的类型定义,尤其在处理模块和插件时。
  • Pinia:对TypeScript有很好的原生支持,能方便地定义和推断类型,增强了代码的健壮性。

灵活性

  • Vuex:更适合大型、复杂的应用,它严格的规则有助于在大型团队和复杂场景下维护状态。
  • Pinia:在灵活性上更胜一筹,适用于各种规模的项目,无论是小型项目快速上手,还是大型项目中部分功能模块的状态管理。

以上是本次分享全部内容。
非常感谢您阅读本篇博客文章。希望这篇文章能够为您提供有价值的信息,并帮助您解决问题或增长知识。如果您对文章内容有任何问题、建议或反馈。同时,也欢迎您继续关注我的博客,获取更多有趣、实用的内容。
期待与您在下一篇文章再次见面。谢谢!

标签:面试题,Vue,DOM,数据,前端,绑定,Vuex,组件,合集
From: https://blog.csdn.net/weixin_44792197/article/details/144402327

相关文章