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

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

  • 你会学到什么?

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

  • 系列介绍

现在的 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.hqwc.cn/news/651607.html

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

相关文章

店匠科技技术产品闪耀,引领新质生产力发展

在科技飞速发展的今天,新质生产力正成为推动社会进步和经济高质量发展的核心力量。店匠科技,作为一家致力于为全球B2C电商提供产品和技术解决方案的领先企业,其技术产品不仅体现了新质生产力的创新特质,更在推动电商行业转型升级中发挥了重要作用。 新质生产力,以创新为主导,摆…

命令行启动pytest自动化程序时,程序卡住不动了,不继续往下执行了

一、问题描述 在执行pytestallure自动化测试工具的时候&#xff0c;命令行启动程序时&#xff0c;程序卡住不继续往下执行&#xff0c;如下图所示。 代码主函数如下&#xff1a; 二、解决方法 测试客户项目时遇到2次此类问题&#xff0c;2次问题原因不一样。 原因一&#xf…

代码随想录算法训练营DAY38|C++动态规划Part.1|动态规划理论基础、509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯

文章目录 动态规划理论基础什么是动态规划动态规划的解题步骤DP数组以及下标的含义递推公式DP数组初始化DP数组遍历顺序打印DP数组动态规划五部曲 动态规划应该如何debug 509.斐波那契数什么是斐波那契数列动态规划五部曲确定dp数组下标以及含义确定递推公式dp数组如何初始化确…

JVS物联网平台驱动网关管理:智能化与自动化的探索

驱动网关的管理 驱动网关是对驱动进程进行生命周期的管理&#xff0c;包括驱动进程的创建、启停、更新、结束等管理功能。 如下图所示&#xff1a; 驱动代理程序是驱动网关的管理程序&#xff0c;每个驱动网关对应于一个驱动代理程序&#xff0c;驱动代理程序初始版本是安装在…

VSCODE通过SFTP链接VM进行开发

在vscode插件里面搜索sftp&#xff0c;安装。 安装之后&#xff0c;按ctrlshiftp&#xff0c;找到sftp的config 然后填写刚刚的IP&#xff0c;然后是你的用户名密码 如果是通过密钥链接的话就是这样配置 然后切换到这个sftp的tab里面 然后在你的项目右键&#xff0c;然后选择op…

13.JAVAEE之HTTP协议

HTTP 最新的版本应该是 HTTP/3.0 目前大规模使用的版本 HTTP/1.1 使用 HTTP 协议的场景 1.浏览器打开网站 (基本上) 2.手机 APP 访问对应的服务器 (大概率) 学习 HTTP 协议, 重点学习 HTTP 的报文格式 前面的 TCP/IP/UDP 和这些不同, HTTP 的报文格式,要分两个部分来看待.请求…

用卷积网络对城市住区进行分类

这将是解释我的人工智能硕士最终项目的几篇文章中的第一篇&#xff0c;我想在其中详细解释从项目的想法到结论&#xff0c;我将在其中展示给定解决方案的所有代码。 总体思路 城市扩张地图集 https://www.lincolninst.edu/es/publications/books/atlas-urban-expansion 项…

企业计算机服务器中了rmallox勒索病毒怎么办?Rmallox勒索病毒解密流程工具

在网络飞速发展的时代&#xff0c;企业离不开网络&#xff0c;网络为企业的生产运营提供了极大便利&#xff0c;加快了企业进步的步伐&#xff0c;依靠网络可以开展各项工作业务&#xff0c;通过网络数据整合&#xff0c;可以更方便企业办公。网络在为企业提供便利的同时也为企…

JAVA实现easyExcel批量导入

注解类型描述ExcelProperty导入指定当前字段对应excel中的那一列。可以根据名字或者Index去匹配。当然也可以不写&#xff0c;默认第一个字段就是index0&#xff0c;以此类推。千万注意&#xff0c;要么全部不写&#xff0c;要么全部用index&#xff0c;要么全部用名字去匹配。…

与 Apollo 共创生态:Apollo 七周年大会给带来的震撼

文章目录 一、七年蛰伏&#xff0c;Apollo 迎来“智变”时刻二、Apollo 企业生态计划与开放平台2.1 Apollo X 企业自动驾驶解决方案2.2 Apollo 开放平台携手伙伴共创生态 三、个人感悟 一、七年蛰伏&#xff0c;Apollo 迎来“智变”时刻 让我们把时间倒回到 2013 年&#xff0…

内置对象部分

一&#xff0c;内置对象 二&#xff0c;math对象 不是构造函数&#xff0c;不需要new来调用&#xff0c;而是直接使用里面的属性和方法即可 1.随机方法random 返回一个随机的小数 [0,1&#xff09; 2.日起格式化 返回的月份会小一&#xff0c;记得加一 周一返回1&#xff…

swagger xss漏洞复现

swagger xss漏洞复现 文章目录 swagger xss漏洞复现漏洞介绍影响版本实现原理漏洞复现修复建议: 漏洞介绍 Swagger UI 有一个有趣的功能&#xff0c;允许您提供 API 规范的 URL - 一个 yaml 或 json 文件&#xff0c;将被获取并显示给用户 根本原因非常简单 - 一个过时的库Dom…