来,聊聊前端框架发展史

文章目录

  • 前言
  • 一、阶段
    • 1. 早期阶段:原生HTML/CSS/JavaScript
    • 2. jQuery时代
    • 3. MVC/MVVM框架的兴起
    • 4. 现代前端框架与工具链
      • 4.1. React + Webpack + Babel
        • 4.1.1. 安装依赖
        • 4.1.2. 配置Webpack
        • 4.1.3. Babel配置
        • 4.1.4. React组件和入口文件
        • 4.1.5. 运行开发服务器
      • 4.2. Vue.js + Webpack + Babel
        • 4.2.1. 使用Vue CLI创建项目
        • 4.2.2. Vue组件和入口文件
        • 4.2.3. 运行开发服务器
  • 二、热门文章

前言

前端框架的发展史可以追溯到HTML和CSS的初期,以及后续JavaScript的出现和演变。随着Web技术的不断进步,前端框架也经历了从简单到复杂,从单一功能到全面解决方案的演变过程。

在HTML和CSS的初期,样式表主要用于调节网页的显示方式。然而,随着HTML的成长和设计师的需求增加,样式表的功能逐渐丰富,使得网页的显示更加灵活和多样化。随后,JavaScript的出现为网页带来了动态效果和交互性。然而,早期的前端开发往往涉及到大量的DOM操作,代码冗余且难以维护。

为了解决这些问题,前端框架应运而生。最早的前端框架之一是jQuery,它提供了丰富的插件和元素选择功能,大大简化了DOM操作,使得前端开发变得更加高效。同时,jQuery也解决了浏览器之间的JS兼容性问题,使得开发者可以使用统一的写法来解决相同的操作。

随着前端开发的不断发展,MVC(Model-View-Controller)设计模式开始流行。MVC将数据的处理和展示彻底分开,使得前端代码更加清晰和可维护。在这个背景下,Backbone等早期前端框架应运而生。Backbone是一个制作SPA(单页面应用程序)的框架,它结合了jQuery和Underscore,并使用require.js实现模块化加载。

随后,前端框架进一步发展,出现了更多的解决方案。例如,AngularJS是一个MVVM(Model-View-ViewModel)的框架,它实现了数据双向绑定,使得前端数据与视图的同步变得更加简单。ReactJS则是Facebook推出的一个针对视图层的库,它采用了单向数据流的设计,使得组件之间的数据传递更加清晰和可控。Vue则是一个轻量级的MVVM框架,它提供了渐进式开发的方案,使得开发者可以根据项目需求逐步引入和使用框架的功能。

一、阶段

1. 早期阶段:原生HTML/CSS/JavaScript

在这个阶段,前端开发主要依赖于HTML、CSS和JavaScript的原生能力。开发者直接操作DOM,实现页面布局和交互。

案例代码:一个简单的原生JavaScript实现点击按钮改变文本内容的例子。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>原生JavaScript示例</title>
</head>
<body><button id="myButton">点击我</button><p id="myText">初始文本</p><script>document.getElementById('myButton').addEventListener('click', function() {document.getElementById('myText').textContent = '文本已改变';});</script>
</body>
</html>

2. jQuery时代

jQuery简化了HTML文档遍历、事件处理、动画和Ajax交互等任务,使得前端开发变得更加方便。

案例代码:使用jQuery实现简单的Ajax请求。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>jQuery Ajax示例</title><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body><button id="loadData">加载数据</button><div id="dataContainer"></div><script>$('#loadData').click(function() {$.ajax({url: 'https://api.example.com/data',type: 'GET',dataType: 'json',success: function(data) {$('#dataContainer').text(JSON.stringify(data));},error: function(jqXHR, textStatus, errorThrown) {console.error('请求失败: ' + textStatus, errorThrown);}});});</script>
</body>
</html>

3. MVC/MVVM框架的兴起

随着前端应用的复杂度增加,MVC(Model-View-Controller)和MVVM(Model-View-ViewModel)设计模式开始流行,催生了如AngularJS、React和Vue等框架。

案例代码:使用Vue.js实现一个简单的待办事项列表。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Vue.js 示例</title><script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
</head>
<body><div id="app"><input v-model="newTodo" @keyup.enter="addTodo"><ul><li v-for="(todo, index) in todos" :key="index">{{ todo }}<button @click="removeTodo(index)">删除</button></li></ul></div><script>new Vue({el: '#app',data: {newTodo: '',todos: []},methods: {addTodo() {if (this.newTodo) {this.todos.push(this.newTodo);this.newTodo = '';}},removeTodo(index) {this.todos.splice(index, 1);}}});</script>
</body>
</html>

4. 现代前端框架与工具链

前端框架与工具链的结合使得现代前端开发更加高效和模块化。下面我将提供一些使用不同前端框架(如React、Vue.js)和工具链(如Webpack、Babel)的案例代码。

4.1. React + Webpack + Babel

4.1.1. 安装依赖

首先,你需要安装React、ReactDOM、Webpack、Babel等相关的依赖。

npm init -y
npm install --save react react-dom
npm install --save-dev webpack webpack-cli webpack-dev-server babel-loader @babel/core @babel/preset-env @babel/preset-react html-webpack-plugin
4.1.2. 配置Webpack

在项目的根目录下创建一个webpack.config.js文件,并配置Webpack。

const HtmlWebpackPlugin = require('html-webpack-plugin');module.exports = {mode: 'development',entry: './src/index.js',output: {filename: 'main.js',path: __dirname + '/dist',},module: {rules: [{test: /\.(js|jsx)$/,exclude: /node_modules/,use: {loader: 'babel-loader',},},],},plugins: [new HtmlWebpackPlugin({template: './src/index.html',}),],devServer: {contentBase: './dist',hot: true,},
};
4.1.3. Babel配置

在项目的根目录下创建一个.babelrc文件,并配置Babel。

{"presets": ["@babel/preset-env", "@babel/preset-react"]
}
4.1.4. React组件和入口文件

src目录下创建index.jsApp.js

src/App.js:

import React from 'react';function App() {return (<div><h1>Hello, React with Webpack and Babel!</h1></div>);
}export default App;

src/index.js:

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';ReactDOM.render(<App />, document.getElementById('root'));
4.1.5. 运行开发服务器

package.jsonscripts中添加启动Webpack开发服务器的命令。

"scripts": {"start": "webpack serve --open"
}

然后运行npm start来启动开发服务器。

4.2. Vue.js + Webpack + Babel

Vue.js的配置与React类似,但Vue CLI工具提供了更为简化的设置过程。

4.2.1. 使用Vue CLI创建项目
npm install -g @vue/cli
vue create my-vue-app

按照提示选择预设配置或手动选择特性。

4.2.2. Vue组件和入口文件

src目录下,Vue CLI已经为你创建好了基本的文件结构。你可以直接编辑src/App.vue来创建你的Vue组件。

src/App.vue:

<template><div id="app"><h1>Hello, Vue.js with Webpack and Babel!</h1></div>
</template><script>
export default {name: 'App',
};
</script><style>
/* 这里可以写CSS样式 */
</style>
4.2.3. 运行开发服务器

在Vue CLI创建的项目中,你可以直接运行npm run serve来启动开发服务器。

二、热门文章

【温故而知新】JavaScript数字精度丢失问题
【温故而知新】JavaScript的继承方式有那些
【温故而知新】JavaScript中内存泄露有那几种
【温故而知新】JavaScript函数式编程
【温故而知新】JavaScript的防抖与节流
【温故而知新】JavaScript事件循环

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/734125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qt-C++笔记之使用Cmake来组织和构建QWidget工程项目

qt-C笔记之使用Cmake来组织和构建QWidget工程项目 —— 杭州 2024-03-10 code review! 文章目录 qt-C笔记之使用Cmake来组织和构建QWidget工程项目1.运行2.文件结构3.CMakeLists.txt4.main.cpp5.widget.h6.widget.cpp7.widget.ui 1.运行 2.文件结构 3.CMakeLists.txt 代码 c…

中国联通云联网在多元行业应用中的核心地位与价值体现

在全球化浪潮与数字化转型的时代背景下&#xff0c;中国联通积极响应市场需求&#xff0c;推出以云联网为核心的全球化智能组网解决方案&#xff0c;突破地理限制&#xff0c;为各行业提供高效、安全、灵活的网络服务。该方案不仅涵盖传统的通信连接&#xff0c;更是深入到能源…

day54(reactJS)关于事件处理函数 props方法 合成事件 严格模式 组件声明周期 纯组件以及性能优化以及网络请求

&#xff08;reactJS&#xff09;关于事件处理函数this指向的 props与state&#xff0c;setState方法 合成事件与事件对象 严格模式标签 组件声明周期 纯组件以及性能优化以及关于网络请求 1.关于事件处理函数this指向2.关于合成事件与事件对象3.props与state&#xff0c;setSt…

【神经网络与深度学习】深度神经网络(DNN)

概述 深度神经网络&#xff08;Deep Neural Networks&#xff0c;DNN&#xff09;是一种由多个隐藏层组成的神经网络模型。每个隐藏层由多个神经元组成&#xff0c;这些神经元通过权重和激活函数进行信息传递和计算。 深度神经网络通过多层的非线性变换&#xff0c;可以学习到…

数据结构---C语言版 408 2019-41题代码版

题目&#xff1a; 2019 年 ( 单链表 ) 41 &#xff0e;&#xff08; 13 分&#xff09;设线性表 L ( a 1 , a 2 , a 3 ,…… ,an2, a n 1 , a n ) 采用带头结点的单链表保存&#xff0c;链表中 的结点定义如下&#xff1a; typedef struct node { int data; struc…

Smart PLC模拟量采集和低通滤波器组合应用

SMART PLC模拟量采集功能块"S_ITR"算法公式和详细代码请参考下面文章&#xff1a; 1、模拟量采集功能块"S_ITR" https://rxxw-control.blog.csdn.net/article/details/121347697https://rxxw-control.blog.csdn.net/article/details/1213476972、线性转换…

ARM-v7 程序计数器PC的相关指令与应用

1. 前言 如图1所示&#xff0c;R14是连接寄存器&#xff08;Link Register&#xff09;&#xff0c;在汇编指令中通常也写为LR&#xff0c;用于存储函数调用和异常等的返回信息&#xff0c;复位时&#xff0c;默认值为0xFFFFFFFF&#xff1b; 图1 Core register R15是程序计数…

vscode 配置 c 语言 问题解决

1.VS code调试时显示Unable to start debugging.The value of miDebuggerPath is invalid。 解决方法: VS code调试时显示Unable to start debugging.The value of miDebuggerPath is invalid_unable to start debugging. the value of midebugger-CSDN博客 2.VSCode运行C终端…

提示词工程技术:类比、后退、动态少样本、自动生成CoT

类比提示 “类比提示”利用类比推理的概念&#xff0c;鼓励模型生成自己的例子和知识&#xff0c;从而实现更灵活和高效的解决问题。 后退提示 “后退提示”专注于抽象&#xff0c;引导模型推导出高级概念和原理&#xff0c;进而提高其推理能力。 使用一个基本的数学问题来…

isdigit 是 Python 中字符串对象的一个方法,用于检查字符串中的所有字符是否都是数字。

如果字符串中的所有字符都是数字&#xff0c;则返回 True&#xff0c;否则返回 False。这个方法只能用于检查整数&#xff0c;并且它只能识别 0-9 的数字字符。 这里有一个使用 isdigit 方法的例子&#xff1a; s "12345" if s.isdigit(): print("字符串只包…

npm下载时下载失败解决方法

1.清楚缓存 npm cache clean --force2.切换下载镜像 1.查看当前使用的镜像地址命令 npm config get registry切换为淘宝镜像命令&#xff08;安装一些package容易报错&#xff09; npm config set registry https://registry.npm.taobao.org或官方&#xff1a; npm config…

分类算法(Classification algorithms)

逻辑回归(logical regression&#xff09;&#xff1a; 逻辑回归这个名字听上去好像应该是回归算法的&#xff0c;但其实这个名字只是在历史上取名有点区别&#xff0c;但实际上它是一个完全属于是分类算法的。 我们为什么要学习它呢&#xff1f;在用我们的线性回归时会遇到一…

读书·基于RISC-V和FPGA的嵌入式系统设计·第3章

72.8051单片机的弊端和指令集架构CISC的缺点 76.RV指令集的特征&#xff08;⭐&#xff09; 特权架构和特权指令集是相关但不完全相同的概念。 特权架构&#xff08;Privileged Architecture&#xff09;指的是计算机体系结构中用于实现特权级操作的硬件和软件机制。特权架构定…

RabbitMQ——死信队列

RabbitMQ——死信队列 死信队列&#xff08;Dead Letter Queue&#xff0c;DLQ&#xff09;是 RabbitMQ 中的一种重要特性&#xff0c;用于处理无法被消费的消息&#xff0c;防止消息丢失。 死信的来源 在消息队列中&#xff0c;当消息满足一定条件而无法被正常消费时&#xf…

电商运营常用名词解释

电商运营中的基础名词解释 GMV∶成交总额&#xff0c;含拍下未支付订单金额 ROl:投入产出比&#xff0c;ROl交易额/花费&#xff0c;投入产出比越高越好 uV︰独立访客&#xff0c;统计1天内访问某站点的用户数 PV:访问量&#xff0c;即页面浏览量或点击量。一个顾客浏览了两次…

前端框架的发展历史介绍

前端框架的发展历史是Web技术进步的一个重要方面。从最初的简单HTML页面到现在的复杂单页应用程序&#xff08;SPA&#xff09;&#xff0c;前端框架和库的发展极大地推动了Web应用程序的构建方式。以下是一些关键的前端框架和库&#xff0c;以及它们的发布年份、创建者和主要特…

java-ssm-jsp的问卷调查系统的设计与实现

java-ssm-jsp的问卷调查系统的设计与实现 获取源码——》公主号&#xff1a;计算机专业毕设大全

抖音商家活动信息未在商详展示会有哪些处罚?

一、什么是「违规玩法-活动信息未在商详展示」? 什么是「违规玩法-活动信息未在商详展示」?由于当前平台未提供官方营销工具(例如免单、返现等)&#xff0c;但是创作者在进行商品推广(不仅限口播、画面、标题文案等)宣传该类营销玩法&#xff0c;未在商品商详页展示说明&…

第十五章垃圾回收相关算法

第十五章垃圾回收相关算法 文章目录 第十五章垃圾回收相关算法1. 垃圾标记阶段的算法之引用计数算法1.1 垃圾标记阶段&#xff1a;对象存货判断1.2 方式一&#xff1a;引用计数算法循环引用 1.3 小结 2. 垃圾标记阶段的算法之可达性分析算法2.1 方式二&#xff1a;可达性分析&a…

Qt 定时器事件

文章目录 1 定时器事件1.1 界面布局1.2 关联信号槽1.3 重写timerEvent1.4 实现槽函数 启动定时器 2 定时器类 项目完整的源代码 QT中使用定时器&#xff0c;有两种方式&#xff1a; 定时器类&#xff1a;QTimer定时器事件&#xff1a;QEvent::Timer&#xff0c;对应的子类是QTi…