LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

Vue与React 的崛起——前端演进之路

admin
2025年1月1日 13:25 本文热度 1162
本文转载于稀土掘金技术社区,作者:加减法原则

https://juejin.cn/post/7452929847511777331

前端开发从早期的静态网页,通过JavaScript引入动态交互,再到如今复杂的单页应用(SPA),每一次变革都标志着技术的进步。Vue.js 与React的出现不仅革新了Web应用构建的方式,也带来了全新的思考模式——数据驱动和组件化思维。那为什么Vue与React会成为前端开发的主流呢。

我们先来了解二者的特点

Vue

  • Vue 由前Google工程师尤雨溪(Evan You)在2014年发布,是三者中最年轻的框架。它综合了Angular的数据绑定特性和React的虚拟DOM概念,同时保持了轻量级和简单易用的特点。

设计理念:Vue 设计为渐进式框架,意味着它可以被逐步引入现有项目中,或者作为新项目的完整解决方案。它的核心库专注于视图层,易于与其他库或已有项目整合。

灵活性与性能:Vue 提供了灵活的API和良好的性能表现,尤其是在中小型项目中表现出色。它的双向数据绑定机制简化了状态管理和UI同步。

React

  • React 是由Facebook开发并维护的一个开源JavaScript库,用于构建用户界面。由于背后有强大的企业支持,React 在稳定性和长期支持方面具有优势。
  • 声明式编程:React 推广了一种声明式的编程风格,使得代码更易于阅读和调试。通过使用JSX语法,React允许开发者直接在组件内部编写类似HTML的模板代码,增强了可读性和表达力。
  • 生态系统:React 生态系统非常丰富,拥有大量的第三方库和工具,如Redux用于状态管理,Next.js用于服务端渲染等。这些扩展让React能够适应各种复杂的业务需求。
  • 性能优化:React 引入了虚拟DOM的概念,有效减少了实际DOM操作带来的开销,提高了应用的响应速度。同时,React也支持服务端渲染,进一步提升了首屏加载时间。 

最原始的前端: DOM 编程

回首前端开发最初的模样,那是一个底层 API DOM 编程与事件机制主导的时代,堪称前端的原始社会。开发者们直接操作 DOM,通过诸如document.getElementById等底层方法获取元素,再利用事件机制为元素绑定交互逻辑。就像下面这段代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h2 id="app"></h2>
<input type="text" id="todo-input">
<script>
  var app = document.getElementById('app')
  var todoInput = document.getElementById('todo-input')
  todoInput.addEventListener('input'function(event{
    var val = event.target.value
    console.log(val, todoInput.value, this.value);
    app.ineerText = val
  })
  
</script>
</body>
</html>

在这段代码中,我们手动获取app和todo-input元素,然后给输入框绑定input事件,当用户输入内容时,尝试将输入值赋给app元素的ineerText属性(这里其实有误,应为innerHTML,但这恰好反映出当时开发的易错性)。这种开发方式极其复杂,频繁地访问和修改 DOM,性能很差。因为 JavaScript 的 V8 引擎是单线程的,而渲染引擎负责处理 HTML 和 CSS,二者相对独立。每次 DOM 操作都像是一次漫长的 “跋涉”,从 V8 引擎到渲染引擎,路途遥远,严重影响页面渲染效率。

这种方式虽然直观,但存在诸多缺点:

  • 复杂性:随着应用逻辑的增长,代码变得难以管理和维护。
  • 性能问题:频繁地访问和修改DOM导致浏览器渲染效率低下。
  • V8引擎与渲染引擎分离:JavaScript运行在V8引擎上,而HTML和CSS则由渲染引擎负责,两者之间的交互增加了额外开销。

为了解决这些问题,Vue引入了一种机制来批量收集DOM更新,从而减少不必要的重绘和回流,提高了页面响应速度。

jQuery 带来的改变

随着前端需求日益复杂,jQuery 应运而生,。它作为一个强大的 JavaScript 框架,极大地简化了 DOM 操作。通过封装了一系列便捷方法,让开发者告别了冗长繁琐的原生 DOM 操作。例如,选取元素变得简洁直观,事件绑定也轻松许多,开发者得以从复杂的底层逻辑中解脱出来,将更多精力放在业务功能实现上。

<input type="text" id="todo-input">
<script>
var todoInput = document.getElementById('todo-input');
todoInput.addEventListener('input'function(event{
  console.log(event.target.value);
});
</script>

Query等库的出现极大地简化了DOM操作,$符号成为了许多开发者不可或缺的一部分。它们提供了更简洁的语法来选择元素、遍历节点树以及处理事件,使得编写跨浏览器兼容的代码变得更加容易。然而,随着Web进入2.0时代,应用程序变得越来越复杂,对性能的要求也越来越高,仅靠这些封装库已不足以满足需求。

现代前端框架 Vue/React 崛起

到了现代前端框架阶段,如Vue.js 和 React,开发者们开始更多地关注业务逻辑本身,而不是底层DOM操作。框架内部实现了高效的更新机制(例如虚拟DOM),减少了不必要的DOM操作,提升了用户体验。

Vue特别之处在于它的声明式UI描述方式,让开发者可以专注于数据模型的设计,而无需担心视图层的具体实现细节。

Vue的核心要素

  1. 数据绑定

    • Vue提供了一系列指令(如v-model)用于实现双向数据绑定,使输入框中的值能够自动反映到数据模型中,反之亦然。
<div id="app">
  <h2>{{title}}</h2> 
  <input type="text" v-model="title">
</div>
<script>
const App = {
  data() {
    return { title"" }
  }
};
Vue.createApp(App).mount('#app');
</script>

在这个例子中,v-model指令将输入框的值与data()对象内的title属性进行了双向绑定。这意味着当用户在输入框中输入内容时,title会实时更新;反之,如果title发生变化,输入框的内容也会相应改变。

  1. 事件监听

    • 使用@keydown.enter这样的事件修饰符可以让特定键盘事件触发相应的函数调用,提高开发效率。
  2. 动态样式绑定

    • 借助:classv-bind:class,可以根据条件动态地添加或移除CSS类名,简化样式管理。
  3. 组件化

    • Vue鼓励将界面划分为独立的组件,每个组件都有自己的模板、逻辑和样式,这不仅提高了代码复用率,还增强了项目的可维护性。

案例:一个简单的待办事项应用

通过一个简单的待办事项应用来具体展示Vue是如何工作的。这个例子包括创建新任务、显示现有任务列表以及根据完成状态设置不同的样式。

<div id="app">
  <h2>{{title}}</h2>
  <input type="text" v-model="title" @keydown.enter="addTodo">
  <ul>
    <li v-for="todo in todos">
      <span :class="{done: todo.done}">{{todo.title}}</span>
    </li>
  </ul>
</div>
<script>
const App = {
  data() {
    return {
      title"",
      todos: [
        {title'吃饭'donefalse },
        {title'睡觉'donetrue}
      ]
    }
  },
methods: {
    addTodo() {
      this.todos.push({
        titlethis.title,
        donefalse
      });
      this.title = '';
    }
  }
};
Vue.createApp(App).mount('#app');
</script>
  • 事件监听 (@keydown.enter)

    • @keydown.enter="addTodo"表示当用户按下回车键时,会触发addTodo方法,该方法负责将新的待办事项添加到todos数组中,并清除输入框。
  • 动态样式绑定 (:class)

    • :class="{done: todo.done}"根据todo.done的布尔值决定是否应用.done类名,从而实现已完成任务的视觉区分。

总结

总之,Vue.js 不仅改变了我们构建Web应用的方式,更重要的是它引导了一种新的思考路径:让开发者可以更高效地解决问题,同时享受简洁优雅的编码过程。随着技术的不断发展,未来可能会有更多的创新涌现,但无论如何,Vue所倡导的数据驱动思想和组件化的实践将会持续影响着前端领域的发展方向。

希望这篇文章能帮助你更好地理解Vue.js的核心理念及其在实际项目中的应用。


该文章在 2025/1/2 18:57:28 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved