自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 NestJS 系列教程(六):拦截器(Interceptor)与统一响应封装

控制器方法执行前后拦截调用;修改方法返回值;异步处理逻辑,如日志、缓存、异常封装等。拦截器通过实现接口构建。

2025-07-23 21:20:06 384

原创 如何打造一个通用表单生成器组件系统?

能力是否具备JSON Schema 驱动✅渲染灵活、可插拔✅动态控制(联动/隐藏/禁用)✅校验、格式化、国际化✅可被复用、多项目通用✅易于扩展组件/设计器✅🎯 一个真正优秀的表单系统,是「抽象能力 + 业务理解 + 技术落地」的结合体。👍 如果你觉得这篇文章有帮助,欢迎,之后会为大家带来更多的关于前端使用技术。

2025-07-16 08:00:00 661

原创 Popover API 实战指南:前端弹层体验的原生重构

Popover API 是 HTML 标准中新加入的一种弹出层机制,通过属性popover和方法控制元素显隐,它内置了定位机制、自动焦点处理、遮罩等功能。📌 类似<dialog>,但更通用、轻量、可自由挂载。Popover API 是前端浮层交互的原生化升级,不再需要手搓逻辑或依赖庞大库,拥有更轻、更快、更一致的弹层能力,是真正「组件时代」的基础设施。👍 如果你觉得这篇文章有帮助,欢迎,后续我会努力更新更多的前端样式方面的实用技巧。

2025-07-14 23:40:34 748

原创 NestJS 系列教程(五):守卫(Guards)与 JWT 用户认证

我们将讲解如何使用拦截器对响应结果统一封装、记录日志、实现响应缓存等能力。(比如 handler metadata)和。的机制,通常用于认证和授权。与中间件不同的是,守卫能访问。,适合做「权限控制」。

2025-07-12 11:41:20 391

原创 NestJS 系列教程(四):中间件、中断器与异常过滤器详解

中间件是一个在请求到达处理函数之前被调用的函数。你可以用它来记录日志、验证请求、添加请求数据等。创建import {Catch,import {import {} }();

2025-07-08 23:43:48 403

原创 如何设计一个“真正可复用”的前端组件?

所谓“可复用”,不仅是复制粘贴组件这么简单,而是:✅ 能跨多个页面/模块使用✅ 能被复合、嵌套、组合✅ 能支持灵活配置和扩展✅ 能隔离内部逻辑,隐藏实现细节✅ 能在多个项目中迁移使用(库化)<TableemptyTip={<Empty description="暂无数据" />}/>这样封装后,整套表格系统可被复用于几十个页面。✅低耦合:功能单一,职责清晰✅高内聚:UI 与状态适度绑定✅可组合:支持嵌套、插槽、自定义结构✅可配置:props + config 驱动行为。

2025-07-07 22:10:13 351

原创 NestJS 系列教程(三):构建 RESTful API —— 路由、DTO 与请求处理

我们继续在上一章的cats模块下扩展接口,构建完整的 REST API。src/└── cats/├── dto/更新import {Get,Post,Body,Param,Delete,Put,@Post()@Get()装饰器作用@Body()获取 POST 请求体@Param()获取 URL 路径参数@Query()获取 URL 查询参数(如?q=xxx)@Headers()获取请求头信息@Req()获取完整 Request 对象(不推荐)

2025-07-06 20:58:13 269

原创 CSS Nesting 实战指南:原生支持层级嵌套,从此告别 SCSS?

CSS Nesting(嵌套规则)是 CSS 原生规范的一部分,它允许你在一个选择器规则内,嵌套定义其子规则,更接近 HTML 结构本身的样式逻辑表达。.card {h2 {&:hover {在 CSS Nesting 中,也可以这样写(略有区别,语法更严谨)。优势点说明更接近 HTML 结构可一目了然看到组件内部样式层级更少 class 命名污染无需像 BEM 那样冗长命名更高维护性多人协作、组件拆分时可读性和上下文更明确减少构建依赖。

2025-07-06 20:52:05 402

原创 NestJS 系列教程(二):模块化架构与依赖注入机制详解

在 Nest 中,模块是组织代码的基本单元。每个功能领域应被封装在自己的模块中。每个模块都应该聚焦于一类职责或功能领域,如:用户模块、商品模块、订单模块等。

2025-07-03 21:28:46 673

原创 CSS `@scope` 实战指南:开启局部样式隔离新时代

scope优势CSS@scope能力描述样式隔离避免样式污染、影响外部结构原生语法不依赖框架,不引入编译复杂度更语义化的组件设计更清晰表达“哪些样式属于哪个结构”适配未来的 Web 组件体系可直接与 Web Components / SSR 配合使用CSS@scope是继变量和容器查询后最值得期待的 CSS 原生能力,它让组件样式隔离更易读、更可维护、更高效,是真正面向未来的样式组织利器!

2025-07-03 08:00:00 824

原创 NestJS 系列教程(一):认识 NestJS 与项目初始化

Nest 是一个渐进式 Node.js 框架,用于构建高性能的服务端应用。Nest 基于 TypeScript 构建,并受 Angular 的启发,结构清晰、模块化、可测试性强。它对 Express(默认)或 Fastify 提供封装,保留底层自由度,同时提供更现代的结构化开发体验。

2025-07-02 21:05:20 772

原创 Vite 构建优化全攻略:快,还能更快!

⏱️ 秒级冷启动📦 构建包体积大幅减小🚀 热更新丝滑流畅💡 复杂项目模块清晰、可控没有最快,只有更快;Vite 构建优化,一定能让你的工程更“丝滑”。👍 如果你觉得这篇文章有帮助,欢迎,后续我会努力更新更多的前端构建工具方面的实用技巧。

2025-07-01 22:45:40 404

原创 requestIdleCallback 与 requestAnimationFrame 实战指南:掌控任务调度的两把利刃!

对比维度调度频率每帧调用(16.7ms)空闲时调用(不固定)任务适用动画绘制、位移、过渡等非关键任务、预处理、缓存等是否影响页面流畅度❌ 可能,如果任务过重✅ 避免卡顿(除非任务超大)是否受页面可见性影响✅ 背景页暂停✅ 背景页暂停兼容性✅ 所有主流浏览器支持⚠️ Firefox/Safari 不支持,需降级是让 UI 更丝滑的时间节拍器,而是提升性能的浏览器缝隙利用器。前者负责「动得好」,后者负责「做得巧」!👍 如果你觉得这篇文章有帮助,欢迎。

2025-07-01 08:00:00 754

原创 CSS Scroll Snap 实战指南:让滚动体验“自动对齐”

Scroll Snap 是一套 CSS 属性组合,用于让滚动元素在滚动结束时自动对齐到特定子元素,实现丝滑的视觉分页体验。父元素设置滚动方向 + 捕捉行为子元素设置对齐点CSS Scroll Snap 是你实现无需 JS 的滚动分页体验最简单有效的方式,不仅优雅流畅,还极其易于维护!

2025-06-27 08:00:00 342

原创 前端环境变量与配置管理实战指南:从开发到上线都不踩坑!

环境变量(Environment Variables)是在构建或运行时注入到应用中的配置信息,通常用于区分开发/测试/生产等不同环境下的参数。技术点说明多环境区分.env.*文件配合--mode使用安全前缀限制只能读取带VITE_REACT_APP_等前缀的变量运行时注入方式使用方式更灵活、安全CI/CD 集成可自动注入构建信息、环境标识、提交记录等环境变量不是“辅助工具”,而是前端工程中配置管理与部署安全的核心基建。用好了,你的前端就能稳定、灵活、可控地上线!

2025-06-26 08:00:00 278

原创 前端性能的隐藏杀手锏:用好 preload / prefetch / preconnect

预加载类型使用时机推荐搭配场景preconnect页面初始化立即使用的外域资源CDN、API、字体、第三方服务等preload当前页但不会立即请求的关键资源字体、首屏图像、异步 JSprefetch未来可能访问的资源路由页面、Tab 模块、动态组件如果说懒加载是延后加载,那么预加载就是提前预测用户行为,并将资源“预投喂”给浏览器,用好这三大策略,你就拥有了提升体验的又一把“浏览器原生利器。👍 如果你觉得这篇文章有帮助,欢迎,后续我会努力更新更多的前端性能优化的实用技巧。

2025-06-25 12:01:07 818

原创 动画炫酷但卡顿?前端高性能动画实现的实战指南!

动画是页面体验加分项,但如果没处理好,可能成为「性能杀手」。让动画只发生在 GPU 合成层上,而不是反复重排页面。👍 如果你觉得这篇文章有帮助,欢迎,后续我会努力更新更多的前端动画优化的实用技巧。

2025-06-20 08:00:00 821

原创 从小水管到洪流:你真的会用前端 Stream API 吗?

Stream(流)是指“按块”处理数据的一种方式,而不是等待整个数据加载完成。🚀 文件上传、下载🎥 视频边下边播📦 大型 JSON 文件解析🧠 AI 接口的流式响应(如 OpenAI)Stream 就像一个数据的水管:一边输入(ReadableStream),一边输出(WritableStream)。📉 降低内存消耗,提升用户体验⏱️ 加快处理速度,尤其在网络/文件传输中🧬 适配未来数据流趋势(AI、大文件、直播、微服务)Stream 不只是后端的玩具,前端也该用起来!

2025-06-19 08:00:00 859

原创 元素大小驱动样式?用 CSS `Container Queries` 实现真正的“组件级”响应式!

传统媒体查询是这样写的:📌 缺陷是显而易见的: 是 CSS 的新能力,允许组件根据容器大小而非视口大小来变化样式。比如下面这种写法:✅ 意味着:当 所在的容器宽度达到 500px 时才触发该样式。我们来做一个组件,在小容器下是垂直排版,大容器下变成横排展示。💅 CSS 样式📌 效果:当 的宽度小于500px,布局为纵向排列;宽度超过 500px,布局自动切换为横排形式。📸 效果图展示你可以通过拖拽容器或切换布局来测试效果,例如:即使在同一个页面上,不同卡片也能根据各自容器大小响应

2025-06-18 08:00:00 581

原创 CSS Anchor Positioning:重新定义「锚定定位」的时代来了!

CSS Anchor Positioning 是一项革命性的新特性,它通过纯CSS实现了元素的精确锚定定位。这项技术解决了传统弹出层开发中的多个痛点,包括繁琐的JS定位计算、滚动适应和防遮挡问题。

2025-06-17 08:30:00 430

原创 打造丝滑滚动体验:Scroll-driven Animations 正式上线!

(基于滚动的动画)是 CSS Animation 最新草案的一部分。它允许你直接在 CSS 中根据页面滚动进度驱动动画,无需 JavaScript!由 Chrome 团队推动,目前已在 Chromium 系浏览器中可用(Chrome 115+)。滚动动画进入声明式时代。你再也不需要手动写scroll监听器,也无需用 JS 操作样式。只需几行 CSS,就能实现视差滚动、延迟加载、进度动画等视觉效果。赶紧打开 Chrome DevTools 开始尝试吧,下一代动效方案,你准备好了吗?

2025-06-15 20:23:55 382

原创 CSS Houdini 解锁前端动画的下一个时代!

CSS Houdini:解锁前端动画新境界 🚀 CSS Houdini是一组突破性的浏览器API,它让CSS从静态样式升级为可编程动画引擎。通过Paint Worklet、Layout Worklet等核心组件,开发者可以直接用JS编写高性能的绘制逻辑,创建传统CSS无法实现的炫酷动效。

2025-06-13 08:04:55 518

原创 一次惊艳的页面动效优化:用 View Transition API 带来“原生级”丝滑体验

《让网页动效更丝滑:View Transition API实战指南》摘要: Chrome推出的View Transition API解决了传统SPA动画生硬的痛点,无需复杂代码即可实现原生App般的过渡效果。文章通过图片切换案例,演示了如何利用view-transition-name标记动画元素,并用document.startViewTransition触发流畅动画。该技术适用于页面切换、DOM重排等场景,支持自动衔接DOM变化,兼容SSR/CSR混合架构。

2025-06-12 12:42:50 728

原创 Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: Package subpath ‘./lib/tokenize‘ is not defined by “exports“

react项目运行时报错

2023-03-02 16:02:02 11120

原创 git使用 -- 不对当前分支造成影响同时拉取远程分支

git使用 -- 不对当前分支造成影响同时拉取远程分支

2022-06-16 14:05:49 572

原创 使用vite创建项目运行时Network提示‘use `--host` to expose’

使用vite创建项目运行时Network提示 “use --host to expose”最近在使用vite创建项目,使用npm跑起来后发现,Network没有显示具体的地址,在Network那个地方会显示如下图所示的这句话:这样的话,即使在同一个局域网内,其他人也无法访问到我这个页面,这个还是比较麻烦的;后来我通过查阅资料发现,原来Network不显示地址是因为IP没有做配置,所以不能从IP启动,这样的话也就没有办法通过IP访问我的页面。解决方法:咱们看一下官网上给的配置信息:这样一看,咱

2022-03-29 21:39:27 1908

原创 vscode配置在react的jsx中补全html提示

vscode配置在react的jsx中补全html提示点击vscode的文件 —》首选项 —》设置,然后搜索 includeLanguages,在出现的页面点击添加项,然后添加图中所示即可。或者直接在setting.json文件中添加如下配置:"emmet.includeLanguages": {"javascript": "javascriptreact"},...

2022-03-17 19:31:09 1715

原创 微信小程序<scroll-view>组件左右滑动没有效果的问题

微信小程序组件左右滑动没有效果的问题小程序组件 < scroll-view > 中分别有上下竖向滑动和左右横向滑动之分,在这次项目中刚好需要用到横向滑动,但在测试过程中发现横向滑动没有了效果(静止在那里没移动过),经调试发现:< scroll-view > 中的需要滑动的元素不可以用 float 浮动;< scroll-view > 中,包裹着需要滑动的元素的大盒子用 display:flex; 是没有作用的;< scroll-view > 中的需要

2022-03-14 07:51:10 721

原创 npm全局安装的包文件所在的位置

npm全局安装的包文件所在的位置有时候我们需要通过npm来安装一些配置在全局环境下的包,但是具体下载安装在什么位置却没有任何提示,这时候我们可以通过 npm root -g 来进行查询,就可以知道全局配置的包下载的位置了。npm root -g各个系统默认存放的位置1.WindowsC:\Users\username\AppData\Roaming\npm\node_modules2.Mac/usr/local/lib/node_modules/sprites-cli3.Linux/

2021-10-13 19:44:33 2470

原创 微信小程序中class=“container”的bug

微信小程序中class=“container”的bug今天在开发微信小程序的时候,在不经意间发现了一个bug,那就是如果把父元素的 class 设置为 container 的话,那么弹性布局 display:flex 就不起作用了如果想使用弹性布局 display:flex 的话,只需要把类名换成其他的名字即可。...

2021-10-12 00:22:58 2063 2

原创 JavaScript获取浏览器可视区域的宽高

JavaScript获取浏览器可视区域的宽高在做项目的时候,我们常常需要对项目做一些优化,来提升页面响应的速度,比如进入可视区域后再发送请求获取数据或者是填充模板,这个时候就需要能够获取到浏览器的可视区域的宽高:// 获取浏览器可视区域宽高(兼容性比较好,不包括工具栏和滚动条)var browserWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;var bro

2021-10-10 21:11:31 3401

原创 用cnpm安装的依赖没有在package.json中找到的解决办法

用cnpm安装的依赖没有在package.json中找到的解决办法起因今天在写项目的时候使用cnpm安装的依赖,等到提示安装完成后,想去package.json文件中去看看安装的依赖,结果没有找到,但是在node_modules文件夹中确实是安装成功了,这就让人很摸不着头脑。解决方法只需要在命令的最后加上一个 -S(大写的S) ,这样安装完成的依赖就能在package.json中看到了。cnpm install xxx(依赖的名称) -S...

2021-09-12 09:54:28 1647 1

原创 Vue学习之---动态组件中的activated与deactivated钩子函数

Vue学习之—被忽视的activated与deactivated钩子函数在学习这两个钩子函数之前呢,怎么需要先了解下Vue内置的动态组件< component >以及与之相配套的< keep-alive > 组件:动态组件指的是动态切换组件的显示与隐藏;< component is = " " > 标签,内置组件,占位符,专门用来实现动态组件的渲染;is 属性指定要渲染出来的组件的名字,指定的值是组件的注册名称;is 属性指定的组件名称是什么,就会在<

2021-09-09 21:29:54 4543

原创 Vue学习之---computed计算属性中你不曾注意到的小细节

Vue学习之—computed计算属性1.当写computed属性的时候要注意所有的计算属性,都要定义在computed 属性中;计算属性在定义的时候,要定义成方法的形式,而且定义成方法的形式后,方法中一定要有返回值,因为使用计算属性最终要得到的就是返回的值;计算属性最终会变成当前的Vue实例对象的属性;2.computed属性的两种形式2.1函数形式的计算属性var vm = new Vue({ data: { a: 1 }, computed: { //

2021-09-08 22:21:48 301

原创 Vue学习之---watch侦听器

Vue学习之—watch侦听器Vue中的watch属性是什么,作用呢?watch属性中存在着能侦听Vue数据的侦听器,而侦听器本质上是个函数,要侦听哪一个数据的变化,就把数据名当做方法名即可;侦听器函数会接收两个参数:第一个参数是数据改变后的新的值,第二个参数是数据改变前的旧的值;watch属性中侦听器的格式watch属性中的侦听器存在着两种格式:方法形式的侦听器export default { data(){ // 定义的一些变量 }, watch:{ // 将要侦听的

2021-09-08 00:30:55 163

原创 Vue指令中v-show 与 v-if 区别

Vue指令中v-show 与 v-if 区别v-showv-show 只是在 display: none 和 display: block 之间切换。无论初始条件是什么都会被渲染出来,后面只需要切换 CSS 或是切换下判断条件,DOM 还是会一直保留着的。v-ifv-if的话就得说到 Vue 底层的编译了。当 v-if 的判断条件为 false 时,组件或DOM元素就不会被渲染,也就是说根本不会创建这个组件或DOM元素;直到条件为 true时,才会创建出来;当判断条件发生切换时会触发销毁/挂载

2021-09-05 23:58:52 98

原创 npm安装时报错:源文本中存在无法识别的标记的解决方法

npm安装时报错:源文本中存在无法识别的标记的解决方法今天在使用npm安装依赖包的时候,npm报了一个错误:当时找了半天也没看出来哪里有错误,于是上网查阅资料,才明白可能是安装的node版本的原因,所以导致npm不识别 @ 符号。解决方法:只需要使用引号将要安装的依赖包名包起来就解决了:...

2021-09-01 20:50:57 2776 1

原创 常见的Http状态码及其含义

HTTP状态码及其含义在写前端的一些功能的时候,大家难免要向后端发送请求,来拿到一些数据,这个时候后端就会返回给咱们一个响应状态码,了解这些状态码可以帮助咱们更好的读懂服务器返回的数据状态,下面是我翻阅资料查询到的一些常见的信息状态码供大家参考:1XX:信息状态码100 Continue 继续一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息2XX:成功状态码200 OK正常返回信息201 Created请求成功并且服务器创建了新

2021-08-31 20:27:50 317

原创 VueRouter中的路由守卫的触发顺序(图解)

最近在学习VueRouter的时候,发现自己总是搞不清楚路由守卫触发的顺序,于是便找到了这个图,希望能够帮助到大家:

2021-08-30 23:11:12 568

原创 Element-ui中的分页(pagination)组件的current-page属性不同步更新视图的坑

Element-ui中的分页(pagination)组件的current-page属性不同步更新视图的坑

2021-08-28 15:46:51 8407

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除