学一个前端 UI 框架,要学些什么内容?

假如你现在要自学 React/Vue 框架,怎么学?

绝大部分同学可能是这样学的:

  • 直接去看官方文档,或者是找一些视频看一遍,学会这个框架的一些基础语法,特性功能等等
  • 参考一些例子上手编写 demo,简单感受一下
  • 然后就是在工作中使用框架,碰到各种问题的时候,上网查找解决方案或者询问 AI
  • 最后就是自己想要深入学习的时候,才会去钻研学习它的原理

这样学好像也没什么问题,因为大家都是这么做的,包括我当初也是这样自学的。

但是,这样学有点像无头苍蝇,对于框架的应用经验全靠摸爬滚打一路踩坑才得来的,成长速度非常慢。

作为过来人,我觉得应该让你提前了解到:我们要学一个前端 UI 框架,应该要关注哪些内容

这样,可以提前有个概念,让你带着目标,查漏补缺地去学习,才能提升得更快。

如何操作 DOM 结构

首先要学的,是这个框架是如何操作 DOM 结构的。

现在流行的 UI 框架,主打的就是封装原生 DOM 操作,让我们可以不直接操作 DOM,只关注数据。

因此,我们更加需要了解,这个框架是怎样操作 DOM 的。核心是这些点:

  • 怎样创建 DOM tree?如何把创建好的 DOM tree 挂载到 document 中?
  • 怎样更新 DOM tree?怎样修改某个元素的内容?怎样插入元素?怎样移除元素?
  • 怎样读取 DOM 元素?虽然 UI 框架给我们做了很好的封装,但是在某些特殊场景中,我们还是要直接操作 DOM tree,框架是怎样提供这个能力的?
  • 怎样删除 DOM tree?如何把 DOM tree 从 document 中卸载?

如何操作样式

然后就要学习如何操作样式,CSS 是前端非常关键的一环。

框架把原生 DOM 封装起来了,我们就不能用常规的方法操作 CSS 了。

因此,我们需要关注这些点:

  • 如何给 DOM 元素添加样式 class?如何读取 DOM 元素的样式 class?如何更新 DOM 元素的样式 class?
  • 如何给 DOM 元素添加 inline style?
  • 如何读取 DOM 元素的 CSS style?如何修改 DOM 元素的 CSS style?

如何处理事件

接下来要学习处理事件。主要是以下这些功能点:

  • 如何给 DOM 元素绑定事件?
  • 如何给 DOM 元素解绑事件?
  • 是否遵循 DOM 事件标准?事件捕获和事件冒泡都有吗?
  • 如何获取事件对象?如何获取原始的事件对象?
  • 如何阻止冒泡?如何阻止默认行为?
  • 是否支持自定义事件?

如何处理表单

接下来是处理表单。毕竟对于前端来说,处理表单是基础能力。而涉及到表单的页面,往往都是比较复杂的,因此更加需要学习 UI 框架是如何让我们处理表单的。

对于处理表单,我们主要关注这些点:

  • 如何设置原生表单元素的属性?比如 value,disabled,placeholder 等等
  • 如何设置/读取不同表单元素的值?
  • 如何监听表单元素的值变化?
  • 如何获取表单的原生 DOM 元素?

如何实现组件化

前面都是 JavaScript 和 DOM 的必备功能,接下来我们需要重点学习组件化相关的内容。

现在流行的 UI 框架,主打的是组件化开发框架,这有利于我们组织复杂项目的代码,让代码更好被维护和复用。

对于组件化,我们要了解这个框架是如何实现组件化的,主要关注这些点:

  • 如何自定义组件?一个自定义组件的代码如何组织?
  • 如何创建组件?如何引入组件?
  • 组件的生命周期是怎样的?有哪些钩子,它们的作用分别是什么?

如何实现组件通信

当我们利用组件化的思想去组织我们的代码时,整个页面的结构就是一个组件树(component tree),

这时,我们需要关注一个非常重要的话题 —— 组件通信。

组件化可以让我们的代码内聚在某个组件内部,但这些组件是不能完全独立的,它们需要通过某些通信方式来协作,从而完成复杂的功能。

因此,我们需要学习这个框架是如何实现组件通信的,主要是以下这些点:

  • 父 -> 子 的通信方式有哪些?各自的优缺点是什么、适用于什么场景?
  • 子 -> 父 的通信方式有哪些?各自的优缺点是什么、适用于什么场景?
  • 祖 -> 孙 的通信方式有哪些?各自的优缺点是什么、适用于什么场景?
  • 孙 -> 祖 的通信方式有哪些?各自的优缺点是什么、适用于什么场景?
  • 任意组件的通信方式有哪些?各自的优缺点是什么、适用于什么场景?

如何复用代码

最后,我们还要探索一个话题,就是如何复用代码。

组件化也是复用代码的一种方式,它复用的是整个组件的代码,这个组件可以用在很多地方,不需要重新写一个新的组件。

除了这个之外,我们还需要学习更细粒度的复用代码,比如如何复用某些逻辑,可以在多个组件中使用?

如果按照可被复用的代码量级来划分层级的话,我们有如下层级:

  • 函数:某个函数的代码可以在任何需要的地方被调用
  • 功能逻辑:特定功能的逻辑代码,可以被复用到各个组件,一般是多个函数的关联集合,或者是一个基类
  • 组件:某个组件可以在任何需要的地方被加载使用
  • 模块:整个业务功能模块被复用到有需要的页面中,通常是由多个组件组合而成
  • 页面:整个页面被复用到站点的业务流程之中

在学习 UI 框架时,我们不仅要学习组件层级的代码复用,还需要学习功能逻辑层级的代码复用。

功能逻辑层级的代码复用是在多个组件中复用代码,因此这一块是跟组件化的实现方案强关联的,因此我们在学习前端 UI 框架时,不能只学习组件化的使用方法,还需要进一步学习如何在多个组件之中复用代码的技巧,这样才能让我们写出更高质量的代码。

好了,现在你知道,在学习 React/Vue 的时候,我们应该学什么了吗?

只要你把上面我说到的这些点都学会了,你就真正学会 React/Vue 了。

----------------【END】----------------

如果你是真心喜欢前端,并相信成长,想要提升自己的话,欢迎加入之道前端学习圈子。

戳这里 免费获取 之道前端的学习资料和专属服务。

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

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

相关文章

asp.net core mvc模块化开发

razor类库 新建PluginController using Microsoft.AspNetCore.Mvc;namespace RazorClassLibrary1.Controllers {public class PluginController : Controller{public IActionResult Index(){return View();}} }Views下Plugin下新建Index.cshtml {ViewBag.Title "插件页…

2024年MathorCup数学建模C题物流网络分拣中心货量预测及人员排班解题全过程文档加程序

2024年第十四届MathorCup高校数学建模挑战赛 C题 物流网络分拣中心货量预测及人员排班 原题再现: 电商物流网络在订单履约中由多个环节组成,图1是一个简化的物流网络示意图。其中,分拣中心作为网络的中间环节,需要将包按照不同流…

鸿蒙Flutter开发故事:不,你不需要鸿蒙化

在华为牵头下,Flutter 鸿蒙化如火如荼进行,当第一次看到一份上百个插件的Excel 列表时,我也感到震惊,排名前 100 的插件赫然在列,这无疑是一次大规模的军团作战。 然后,参战团队鱼龙混杂,难免有…

Unity音频混合器如何暴露参数

音频混合器是Unity推荐管理音效混音的工具,那么如何使用代码对它进行管理呢? 首先我在AudioMixer的Master组中创建了BGM和SFX的分组,你也可以直接用Master没有问题。 这里我以BGM为例,如果要在代码中进行使用就需要将参数暴露出去…

Vue项目与云管平台Nginx部署笔记

Vue项目与云管平台Nginx部署笔记 一、项目架构说明 footAdmin云管前端 Vue2 Webpack 构建,部署路径:/usr/share/nginx/html/footAdmin 使用npm run build生成/dist目录,然后将dist目录下面的所有文件,上传到虚拟机/usr/share/n…

java常用数据转换

1. List与数组互转 ArrayList<String> list new ArrayList<>(); String[] array list.stream().toArray(String[]::new); String[] array1 {"apple", "banana", "orange"}; List<String> list1 Arrays.stre…

JAVA学习--java数组--打印稀疏数组和稀疏数组的还原

1.题目描述 2.代码实现 打印二维数组 public class test04 {public static void main(String args[]){//1.创建一个二维数组11*11&#xff0c;0代表没有棋子&#xff0c;1代表黑&#xff0c;2代表白棋int[][] array1new int[11][11];array1[1][2]1;array1[2][3]2;//输出原…

Java 标准注解(内置注解+元注解)的详细说明及使用场景

以下是 Java 标准注解&#xff08;内置注解&#xff09;的详细说明及使用场景&#xff1a; 1. 核心标准注解 (1) Override 用途&#xff1a;标记一个方法覆盖父类的方法或实现接口的抽象方法。约束&#xff1a; 若方法未正确覆盖/实现&#xff0c;编译器会报错。不能用于字段…

使用Python调用Jenkins Api之获取构建日志使用说明文档

简介 通过 Python 脚本自动化获取 Jenkins 构建日志&#xff0c;可以实现日志分析、错误监控、报告生成等功能。本文档将介绍以下方法&#xff1a; Python-Jenkins 库&#xff1a;官方推荐的 Python 客户端库 日志分页与流式处理&#xff1a;应对大日志文件场景 准备工作 …

Day20-前端Web案例——部门管理

目录 部门管理1. 前后端分离开发2. 准备工作2.1 创建Vue项目2.2 安装依赖2.3 精简项目 3. 页面布局3.1 介绍3.2 整体布局3.3 左侧菜单 4. Vue Router4.1 介绍4.2 入门4.3 案例4.4 首页制作 5. 部门管理5.1部门列表5.1.1. 基本布局5.1.2 加载数据5.1.3 程序优化 5.2 新增部门5.3…

Android java 设计封装增强型WebView组件

Android java 设计封装增强型WebView组件&#xff08;兼容Android 4.4&#xff09; * 特性&#xff1a; * 1. 全生命周期管理 * 2. 智能硬件加速 * 3. 链式配置API * 4. 安全下载管理 * 5. 全屏视频支持 public class EnhancedWebView extends WebView {private CustomWebChrom…

vue 点击放大,图片预览效果

背景&#xff1a; 在使用vue框架element组件的背景下&#xff0c;我们对图片的展示需要点击放大(单张)&#xff1b;如果是多张图片&#xff0c;要支持左右滑动查看多张图片(多张)。 单张图片放大&#xff0c;el-image图片组件&#xff0c;或者原生的img标签。 多张图片放大&…

HTTP代理的全面解读:什么是HTTP代理?HTTP代理的工作原理

在互联网大潮中&#xff0c;每一个请求和返回数据的背后&#xff0c;都离不开传输协议的支持&#xff0c;而HTTP协议无疑是最熟悉的网络通信基础之一。当我们谈到HTTP代理时&#xff0c;它不仅让浏览网络变得更高效&#xff0c;也为数据采集以及全球性远程任务提供了解决方案。…

学习笔记--基于Sa-Token 实现Java项目单点登录+同端互斥检测

目录 同端互斥登录 单点登录SSO 架构选型 模式二: URL重定向传播 前后端分离 整体流程 准备工作 搭建客户端 搭建认证中心SSO Server 环境配置 开放认证接口 启动类 跨域处理 同端互斥登录 同端互斥登陆 模块 同端互斥登录指&#xff1a;同一类型设备上只允许单地…

本地生活服务APP开发,市场发展全新商业机遇

随着移动互联网的快速发展&#xff0c;人们的消费和生活习惯发生了巨大改变&#xff0c;本地生活服务市场迎来了发展爆发期&#xff01;从外卖、团购等&#xff0c;人们越来越依赖通过手机APP解决日常生活中的各种需求。对于企业而言&#xff0c;一款完善、多样、便捷的本地生活…

当科技业成为系统性压榨的绞肉机

深夜的硅谷办公室依然灯火通明&#xff0c;键盘敲击声此起彼伏。一位程序员在Slack上收到主管的紧急需求&#xff1a;“这个功能明早必须上线。”他苦笑一声&#xff0c;关掉手机里名为“缓解焦虑”的冥想App——这已是本周第三次被迫服用公司提供的“心灵解药”。此刻&#xf…

代码随想录算法训练营第五十六天 | 108.冗余连接 109.冗余连接II

108. 冗余连接 卡码网题目链接&#xff08;ACM模式&#xff09;(opens new window) 题目描述 有一个图&#xff0c;它是一棵树&#xff0c;他是拥有 n 个节点&#xff08;节点编号1到n&#xff09;和 n - 1 条边的连通无环无向图&#xff08;其实就是一个线形图&#xff09;…

什么是索引?为什么要使用B树作为索引数据结构?

MySQL的事务特性 1.原子性:原子性就是这个事件要么执行完,要么没执行,不会存在中间状态,与C中华那个加锁避免多线程竞争是一个道理; 2.一致性:保持事件的操作对象双方某数据之和是不变的,就以转账为例,A转给B100块,那么A的余额多100,B的余额就必须少100; 3.隔离性:隔离就是独…

pyqt5报错:qt.qpa.plugin: Could not find the Qt platform plugin “xcb“(已解决)

我在使用pyqt库的时候报错&#xff1a; qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in \ "/mnt/private_disk/anaconda3/envs/aot-manip/lib/python3.8/site-packages/PyQt5/Qt5/plugins/platforms" even though it was found. This ap…

AI大模型全攻略:原理 · 部署 · Prompt · 场景应用

🚀 AI大模型全攻略:原理 部署 Prompt 场景应用 本文从基础原理到实践部署,再到 Prompt 工程与典型应用案例,全方位解析 AI 大模型的学习路径与使用方法,适合开发者、产品经理、技术爱好者等不同背景读者。 🧠 一、什么是 AI 大模型? AI 大模型(Large Language Mo…