前端到全栈进阶之“前端框架”

news2024/11/24 17:57:00

从前端入门到全栈-系列介绍

  • 你会学到什么?

可能学不到什么东西,该系列是作者本人工作和学习积累,用于复习

  • 系列介绍

现在的 Web 前端已经离不开 Node.js,我们广泛使用的 Babel、Webpack、工程化都是基于 Node 的,各个互联网大厂也早已大规模落地 Node 项目。因此,想要成为一名优秀的前端工程师,提升个人能力、进入大厂,掌握 Node.js 技术非常有必要。

Node.js 不仅可以用来完善手头的开发环境,实现减少代码和 HTTP 请求,降低网页请求消耗的时间,提升服务质量。还可以扩展前端工程师的工作领域,用作 HTTP 服务,让前端也能完成一部分后端的工作,减少对后端的依赖,降低沟通成本,提升开发效率。

而且,Node.js 和浏览器的 JavaScript 只是运行时环境不同,编程语言都是 JavaScript ,所以掌握 Node.js 基础对前端工程师来说并不难,难点在于应用。由于浏览器的 JavaScript 主要是负责内容呈现与交互,而 Node.js 应用领域包括工具开发、Web 服务开发和客户端开发,这些都与传统的Web前端领域不一样,用来应对不同的问题。

  • 适宜人群
  • 对 Node.js 感兴趣的 JavaScript 程序员

  • 希望拓展知识边界,往全栈方向发展的前端工程师

  • 知识面涉及,前端,后端,运维,脚本

前端框架的核心概念主要包括以下几点,不同的框架可能有所不同,但大多数前端框架都通常包含以下概念:

组件

组件化思想就是将界面划分为一些独立的、可复用的部分,每部分被称之为一个"组件"。每个组件都可以包含自己的布局(HTML)、样式(CSS)和逻辑(JavaScript)。组件可以独立存在,也可以与其他组件组合,形成完整的应用。

这种方式的优点包括:

  1. 复用性:组件可以在多个地方多次使用,减少了代码量和维护成本。只要维护好一个组件,那么所有使用该组件的地方都会得到更新。
  2. 可维护性:因为每个组件都是独立的,所以修改单个组件不会影响到其他组件,这使得维护起来更加容易。
  3. 清晰的结构:应用的结构更加清晰,每个部分都对应一个组件,这样比单一的HTML、CSS和JS文件更加容易理解。

在前端开发中,React、Vue 和 Angular 等主流框架都广泛使用了组件化。

例如,一个简单的 React 组件可能是这样的:

import React from 'react';

class Welcome extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}

// 使用Welcome组件
<Welcome name="Sara" />

一个简单的 Vue 组件可能是这样的:

// Welcome.vue
<template>
  <div>
    <p>hello, {{ name }}</p>
  </div>
</template>

<script>
export default {
  props: ['name']
}
</script>

<style scoped>
p {
  color: blue;
}
</button>

这样,我们就可以在多个地方使用<Welcome />这个组件,并且传入不同的name属性,显示不同的欢迎信息。这就是组件化思想的简单应用。

数据绑定

数据绑定是前端框架中一个非常重要的概念,它可以让我们将数据与视图连接起来。在很多前端框架中,你不需要手动操作 DOM 来更新页面,只需要更新数据,视图就会自动变化。按照数据与视图的更新关系,数据绑定通常可以分为单向数据绑定和双向数据绑定。

  1. 单向数据绑定:也被称为单向数据流,就是数据只能从一端改变,然后流向另一端。在这种模式中,模型 (Model) 数据会自动更新到视图 (View),但是视图不会影响模型。也就是说,当我们的数据模型变化时,将会引起视图的更新,但是视图的变化并不会影响数据模型。React 就是采用的单向数据流。

  1. 双向数据绑定:双向数据绑定不仅可以做到从 Model 到 View 的数据自动更新,同时也可以做到从 View 到 Model 的同步。也就是说,不仅视图会响应数据的变化,数据也会响应视图的变化。Angular 和 Vue 都有全方位的双向数据绑定体验。

数据绑定的主要优点是减轻了开发者手动操作 DOM 的负担,简化了代码,帮助开发者专注于业务逻辑的实现。同时,数据绑定带来了更好的用户体验,减少了页面闪烁和不必要的页面重载,提高了应用的响应速度。

路由

路由在 web 开发中是非常重要的一个概念,无论是前端还是后端。但这两者中的路由有一些不同的地方。在这里,我会专门讲解一下前端路由。

在前端开发中,路由主要用于控制视图(页面或组件)之间的导航。当你点击一个链接,或者在地址栏输入一个 URL 时,路由系统会决定哪个视图将被渲染到浏览器。

前端路由主要分为两种类型:Hash路由 和 History路由

  1. Hash路由:基于锚链接(URL中的#标签)和 onhashChange 事件。当锚点值改变时,页面不会重新加载。
  2. History路由:基于HTML5中的History API(pushState、replaceState、popState事件)。这种模式相比于 Hash 模式,URL 更加美观。

前端路由的出现,使得单页面应用(SPA)得以快速发展。因为在 SPA 中,页面不会因为链接的改变而重新加载,只是组件的切换,这就需要前端路由系统来控制这个组件的切换。

诸如 React Router(React)、Vue Router(Vue.js)、@reach/router(React)等,这些路由库就提供了在前端环境中创建路由的能力。

所以,理解和掌握前端路由对于前端开发者来说,是非常关键和重要的。

状态管理

在前端开发中,状态管理是一项非常重要的工作。首先,我们需要明确什么是状态(state)。在前端开发中,状态通常是指影响应用行为或者 UI 的数据 —— 比如用户是不是已经登录了,购物车里有哪些商品,用户搜索的关键词是什么等等,都可以被认为是状态,这些数据会影响应用的行为和界面表现。

状态管理就是指管理这些状态,包括状态的读取、修改、删除等操作,以及这些操作引发的应用的变化。

状态管理的需要主要来源于以下原因:

  1. 复杂性 - 当应用的规模变大以后,状态的数量和复杂度会增加,如果没有一个好的状态管理方案,开发和维护都会变得非常困难。
  2. 多组件共享状态 - 在实际开发中,很多状态需要在不同的组件之间共享。如果不使用状态管理库,我们可能需要通过组件的 props 进行繁琐的传递,而且很难保证状态的一致性。
  3. 异步操作 - 很多情况下,我们需要处理异步操作,比如网络请求。如果没有好的状态管理方案,处理这些异步操作会非常复杂。

在 JavaScript 中,常见的状态管理方案有 redux,vuex(用于 vue.js)、mobx等。

举个例子,redux 是一个常见的状态管理库,它提供了一个中心化的存储容器,所有的状态都存储在这里,通过定义 action 和 reducer 我们可以对状态进行操作。action 是描述状态改变的对象,而 reducer 则是根据 action 来实际进行状态改变的函数。使用 redux,我们可以方便地在多个组件之间共享状态,处理异步操作,同时 redux 也提供了一系列的中间件和工具方便我们调试应用和优化性能。

生命周期

在前端开发中,特别是在使用一些流行的前端框架如 React 或 Vue 时,我们经常会听到 "生命周期" 这个词。组件的生命周期,简单来说,就是组件从创建到销毁的过程。在这个过程中会经历如初始化、更新、销毁等多个阶段,每一个阶段都会对应特定的生命周期方法,这些方法给我们提供了在某一时刻操作组件的机会。

以 React 为例,其生命周期主要分为三个阶段:

  1. 挂载阶段(Mounting):这个阶段是指组件实例被创建并插入 DOM 的阶段,在这个阶段 React 会调用如构造函数(constructor)、静态初始化方法(static getDerivedStateFromProps)、渲染方法(render)以及挂载结束方法(componentDidMount)等生命周期方法。这个阶段只会发生一次,它们按照刚刚提到的顺序被调用。
useEffect(() => {
  // 对应 componentDidMount
}, [])
  1. 更新阶段(Updating):这个阶段发生在当 props 或 state 发生改变时,组件会重新渲染。在这个阶段会调用如静态更新方法(static getDerivedStateFromProps)、shouldComponentUpdate、渲染方法(render)、获取快照方法(getSnapshotBeforeUpdate)和更新结束方法(componentDidUpdate)等生命周期方法。这个阶段可以发生多次。
useEffect(() => {
  // 对应 componentDidUpdate
}, [var1, var2])
  1. 卸载阶段(Unmounting):当组件将要从 DOM 中移除时会进入卸载阶段,此时会调用卸载方法(componentWillUnmount)进行一些清理工作,例如清理定时器、取消网络请求或者清理在 componentDidMount 中创建的任何 DOM 元素。
useEffect(() => {
  return () => {
    // 对应 componentWillUnmount
  }
}, [])

理解每个生命周期方法的作用以及何时会被调用,能够帮助我们更好地管理和控制组件的行为以及性能。

虚拟 DOM

虚拟 DOM 是一个很重要的概念,在很多现代的前端框架,比如 React 和 Vue 中,它们都在使用虚拟 DOM 来提高页面渲染的性能。

在传统的开发方式中,当我们需要更新页面上的某一个元素,通常会直接操作真实的 DOM,这样就会引起页面的重绘和重排,通常会消耗大量的性能。这并不是一个问题,如果我们的页面很简单,或者操作很少。然而,随着 Web 应用的复杂度的提高,频繁的直接操作 DOM 将会大大影响应用的性能,导致用户体验下降。

这个时候,虚拟 DOM 就派上了用场。虚拟 DOM,并不是真实 DOM 在浏览器中的表现,而是在 JavaScript 中的一种抽象概念,通常表现为一个对象,这个对象就是更为轻量级的对真实 DOM 的描述。

当状态(state)发生变化需要更新 DOM 时,前端框架会先基于新的状态生成新的虚拟 DOM,然后通过比较新旧虚拟 DOM 的差异(这个过程叫做 Diffing),计算出最小的修改步骤,然后才将这些修改应用到真实的 DOM 上,这个过程叫做 Reconciliation(协调)。

因此,虚拟 DOM 可以减少不必要的真实 DOM 操作,从而提高性能。虽然构建和比较虚拟 DOM 本身需要一些开销,但是由于 JavaScript 执行速度的提高,这些开销通常小于直接进行大量的 DOM 操作。也就是说,虚拟 DOM 提升了性能,同时因为虚拟 DOM 是 JS 对象,更方便开发和管理,从而提高了开发效率。

这只是简单概括了一些前端框架的核心概念,例如 React、Vue 和 Angular 常用的一些概念,不同的框架可能会有其他特定的概念和功能。

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

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

相关文章

【Linux】驱动_2_字符驱动

1. Linux设备分类 字符设备: 指应用程序按字节/字符来读写数据的设备。通常为传真、虚拟终端和串口调制解调器、键盘之类设备提供流通信服务&#xff0c;通常不支持随机存取数据。字符设备在实现时大多不使用缓存器。系统直接从设备读/写每一个字符。块设备: 通常支持随机存取…

【程序分享1】LAMMPS + OVITO + 晶体缺陷识别 + 点缺陷 + 分子动力学模拟

分享2个分子动力学模拟相关的程序。 1. 一种识别体心立方晶体缺陷的新方法。 2. 无后处理的分子动力学模拟中的并行点缺陷识别: lammps的计算和转储方式 。 感谢论文的原作者&#xff01; 第1个程序 关键词&#xff1a; 1. Atomistic simulations, 2. Molecular dynamics…

让客服工作开挂的8个客服办公高效率神器

做客服工作&#xff0c;经常需要写文案&#xff0c;做图片做视频&#xff0c;还要能快捷回复客户&#xff0c;都需要有靠谱的客服办公软件支持&#xff0c;本文介绍了8个高效神器&#xff0c;希望能帮到做客服的亲 前言 做客服工作&#xff0c;在回答客户咨询的同时&#xff0…

2024.4.28 机器学习周报

目录 引言 Abstract 文献阅读 1、题目 2、引言 3、创新点 4、总体流程 5、网络结构 5.1、损失函数 5.2、Confidence Maps 5.3、Part Affinity Fields(PAFs) 5.4、多人的PAFs 6、实验 7、结论 深度学习 yolov8实现目标检测和人体姿态估计 Yolov8网络结构 yaml…

【亲测可用】配置镜像源

文章目录 配置镜像源1. 手动添加镜像源2. 永久配置&#xff08;推荐&#xff09;方法1&#xff1a;方法2 &#xff1a; 小结 配置镜像源 配置镜像源会让资源下载的更快一些 我实验了一下&#xff0c;都成功了的方法&#xff0c;推荐给你们 1.手动添加 2.永久配置 前提是你的…

好看到爆炸的弹窗公告源码

源码介绍 好看到爆炸的弹窗公告源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c; 源码截图 源码下载 好看到爆炸的弹窗公告源码

新标准日本语初下 课后练习作业

新版标准日本语初下 第二十五課 これは明日会議で使う資料です 第二十五課 これは明日会議で使う資料です &#xff12;&#xff14;&#xff0d;&#xff10;&#xff14;&#xff0d;&#xff12;&#xff16; 練習&#xff12;&#xff15;&#xff0d;1&#xff0d;1 例…

Vuforia AR篇(四)— AR虚拟按钮

目录 前言一、创建虚拟按钮二、创建脚本三、效果 前言 在当今互联网和移动设备普及的背景下&#xff0c;**增强现实&#xff08;AR&#xff09;**技术正迅速成为连接现实世界与数字信息的重要桥梁。AR虚拟按钮作为这一技术的创新应用&#xff0c;不仅提供了一种全新的用户交互…

[极客大挑战 2019]Upload、[ACTF2020 新生赛]Upload、[MRCTF2020]你传你呢

[极客大挑战 2019]Upload 打开环境&#xff0c;是上传一句话木马的题 先上传1.php试试&#xff0c;发现不可以 试试改后缀为phtml&#xff0c;提示语句中不能包含<?&#xff0c;只能改木马&#xff1a; <script language"php">eval($_POST[line]);</sc…

ListView、RecycleView、动画、单位、ViewPager

ListView列表 老版本 public View oldGetView(int position, View convertView, ViewGroup parent) {//返回每一个item//拿到布局if (convertViewnull)convertView LayoutInflater.from(context).inflate(R.layout.my_list_view, parent, false);//find会耗时需要优化TextVi…

YOLOv8核心原理深度解析

YOLOv8源码地址: https://github.com/ultralytics/ultralytics 一、简介: 根据官方描述,Yolov8是一个SOTA模型,它建立在Yolo系列历史版本的基础上,并引入了新的功能和改进点,以进一步提升性能和灵活性,使其成为实现目标检测、图像分割、姿态估计等任务的最佳选择。其具体…

Rancher-Longhorn-新增磁盘以及卷创建原理和卷副本调度规则

一、添加磁盘-官网指引 重点在于&#xff1a; 1、比如你新增了一块盘&#xff0c;你需要做一下事情&#xff1a; 1、执行 lsblk 能找到你的盘。 2、然后执行 fdisk /dev/sdxx 分区你的盘。 3、然后对于分区部署文件系统&#xff0c; mkfs.xfs 4、然后执行 mount /dev/sdxxx 你…

项目管理中常用的三个工具:甘特图、看板、燃尽图

在日常项目管理的实践中&#xff0c;为了更有效地追踪项目进度、优化资源配置和提高团队协作效率&#xff0c;管理者常常会借助一些工具来辅助工作。这些工具的本质在于将抽象复杂的项目管理任务具象化、简单化&#xff0c;以更直观、方便的方式呈现出来。 以下介绍项目管理中…

Git--基础学习--面向企业--持续更新

一、基础学习 1.1基本命令 //查询基础信息 git config --global --list //选取合适位置创建 mkdir 文件名 //创建文件夹 //全局配置 git config --global user.email "****e***i" git config --global user.name "*** K****"//--------------------进入…

Linux系统编程---线程同步

一、同步概念 同步即协同步调&#xff0c;按预定的先后次序运行。 协同步调&#xff0c;对公共区域数据【按序】访问&#xff0c;防止数据混乱&#xff0c;产生与时间有关的错误。 数据混乱的原因&#xff1a; 资源共享(独享资源则不会)调度随机(意味着数据访问会出现竞争)线…

新建云仓库

1.GitHub新建云仓库&#xff1a; LICENSE:开源许可证&#xff1b;README.md:仓库说明文件&#xff1b;开源项目&#xff1b;cocoaPodsName.podspec: CocoaPods项目的属性描述文件。 2.Coding新建云仓库&#xff1a; 备注&#xff1a; Coding新建项目&#xff1a;

自动化机器学习流水线:基于Spring Boot与AI机器学习技术的融合探索

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

训练营第三十五天动态规划(基础题part1)

训练营第三十五天动态规划&#xff08;part1&#xff09; 需要用到之前的数据 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 509. 斐波那契数 力扣题目链接 题目 斐波那契数 &#xff08;通常用 F(n…

动态规划——斐波那契数列模型:面试题08.01.三步问题

文章目录 题目描述算法原理1.状态表示2.状态转移方程3.初始化4.填表顺序5.返回值 代码实现CJava 题目描述 题目链接&#xff1a;面试题08.01.三步问题 如果n是0走法可能是1也可能是0&#xff0c;所以本题范围并不需要考虑直接从1开始即可 因为以3为结尾有直接从0到3的方式&a…

深度学习500问——Chapter08:目标检测(4)

文章目录 8.3 One Stage 目标检测算法 8.3.1 SSD 8.3.2 DSSD 8.3.3 YOLOv1 8.3 One Stage 目标检测算法 我们将对单次目标检测器&#xff08;包括SSD系列和YOLO系列等算法&#xff09;进行综述。我们将分析FPN以理解多尺度特征图如何提高准确率&#xff0c;特别是小目标的检测…