自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 React - 实现一个支持TypeScript类型推导的 useRequest

当我们使用useState和请求时,有这样的场景: 需要在页面挂载的时候请求,并且支持loading状态和错误信息捕获。这个函数本身是没什么难度的,主要是需要支持TypeScript的类型推导,就当做一次TypeScript类型的练习吧

2023-12-14 16:39:36 412

原创 事件循环 - nextTick与微任务 - 在 NodeJS的ESM模式和CJS模式下,nextTick与.then执行顺序不一致的问题

今天想来分享一下nodejs的type: "module"对事件循环的影响。当面试时遇到了事件循环问题,如果遇到了nextTick,把CommonJS和ESM的区别说清楚,相信会给你带来额外加分

2023-11-21 17:28:09 287

原创 React实现一个拖拽排序组件 - 支持多行多列、支持TypeScript、支持Flip动画、可自定义拖拽区域

React实现一个拖拽排序组件 - 支持多行多列、支持TypeScript、支持Flip动画、可自定义拖拽区域

2023-11-05 15:56:15 1811

原创 Promise的并发控制 - 从普通并发池到动态并发池

给你一个有200个URL的数组,通过这些URL来发送请求,要求并发请求数不能超过五个。 这是一道很常考的面试题,接下来让我们来学习一下Promise并发控制 主要思路就是,判断当前队列是否满,满则等待,有空闲则补齐。 利用 Promise.race 方法,可以判断一个Promise数组中 “谁最先完成” ,从而让等待中的函数开始运行。

2023-11-04 00:42:34 714

原创 解决 React forwardRef 与 TypeScript 泛型组件冲突的问题

​ forwardRef是一个可以将组件内的ref对外暴露的高阶组件,当你的组件需要对外暴露元素的Ref,或者想对外暴露某些内部方法,就可以使用这个 (对应vue3的 expose 方法) 但是当forwardRef与TypeScript泛型组件结合时,会出现泛型丢失的问题 (传入泛型无效) 对这个问题,网上有许多解决方法,比如 定义 global.d.ts 等,但是感觉都不够高效,现在给大家带来我的解决方法 主要思路就是创建一个高阶组件,继承原

2023-11-03 22:42:55 1515

原创 性能优化之懒加载 - 基于观察者模式和单例模式的实现

在前端性能优化中,关于图片/视频等内容的懒加载一直都是优化利器。当用户看到对应的视图模块时,才去请求加载对应的图像。 原理也很简单,通过浏览器提供的IntersectionObserver - Web API 接口参考 | MDN (mozilla.org),观察“哪个元素和视口交叉”,从而进行懒加载。 这个API具有很好的性能,因为它的监听是异步的,不会影响JS的主线程,所以比传统的“监听页面滚动”更佳。关于API的使用,这里就不做过多说明了,主要操作如下:

2023-11-03 22:23:42 1445

原创 实现分片上传、断点续传、秒传 (JS+NodeJS)(TypeScript)

上传文件是一个很常见的操作,但是当文件很大时,上传花费的时间会非常长,上传的操作就会具有不确定性,如果不小心连接断开,那么文件就需要重新上传,导致浪费时间和网络资源。 所以,当涉及到大文件上传时,分片上传和断点续传就显得很有必要。把文件分成多个分片,一片片上传,最终服务端再进行合并操作。主要思路:计算唯一标识 --> 若上传过,则秒传 --> 分片 --> 若上传过部分,则断点续传 --> 正常分片上传 --> 完整性校验 --> 合并请求

2023-10-28 14:20:46 2908

原创 ThreeJS - 封装一个GLB模型展示组件(TypeScript)

最近基于Three.JS,使用class封装了一个GLB模型展示,支持TypeScript、支持不同框架使用,具有多种功能。最主要的操作,其实就是下面这两步,做完就显示模型出来了,其它就是可视化的配置了。const modelShow = new GLBModel(node) //创建实例//加载模型。

2023-10-02 23:07:16 2607

原创 使用Class二次封装sequelize (nodejs、next、nuxt操作数据库)

最近是在做NextJS全栈,避免不了去操作数据库。sequelize 是一个NodeJS操作数据的ORM框架,可以有效避免原生SQL语句导致的SQL注入漏洞。 但是原生的sequelize写起来比较繁琐,且对详细的ts支持并不是很好,所以我二次封装了一个,简化了一些操作 而且一个项目肯定不止链接一个数据库,所以使用class来封装,才能达到代码复用的效果 只需要定义好数据库的ts接口,就可以获得良好的代码提示

2023-09-23 15:08:33 462 2

原创 二次封装LocalStorage,添加ts类型支持

使用效果:良好的ts类型推断,良好的代码提示,见图

2023-09-23 14:30:57 238

原创 React 实现一个瀑布流组件(TypeScript) 支持宽度响应式,支持任意列数,支持触底加载,良好的TS类型支持

瀑布流是很常见的布局,移动端、PC端均可使用,主要特点是每个元素等宽,但是不等高。(比如我们逛淘宝,商品的展示就是瀑布流)瀑布流只使用css的话,效果非常不好,且限制特别多,一般都是使用JS进行高度计算 注:本文的实现,需要提前知道图片的大致宽高比例,可以让后端返回(因为在Img加载出来后,前端才能获取到真实的宽高,不划算)本文代码示例效果:支持宽度响应式,支持任意列数,支持触底加载,良好的TS类型支持

2023-09-23 14:03:45 1997 13

原创 mini-vue - 快速Diff算法

虚拟节点vnode的children有两种类型,一种就是vnode数组(可以根据数组来patch递归产生子节点),一种就是string类型(就比如 文本 中,div是vnode,"文本"是children )在进行更新的时候,children的变化有四种可能,其它三种就比较简单,而vnode[] -> vnode[],这种情况就比较复杂了,出于性能考虑,我们不能把所有节点移除,然后再挂载,这时候就需要使用DIff算法,来判断哪些节点可以复用,哪些节点需要移除,哪些节点需要添加

2023-08-07 00:37:04 115

原创 个人笔记 - vue3源码 - 手敲mini-vue

vue3源码学习笔记,仓库代码中详细注释笔记

2023-07-31 19:21:27 256

原创 Nuxt3 - useState全局状态管理与localStorage本地存储持久化

​这是Nuxt3为我们准备的全局状态管理,且支持响应式,可以无需使用pinia等,直接在项目中使用。官网文档:useState · Nuxt Composables、State Management · Get Started with Nuxt注意事项:· 由于会把State存储为JSON,所以请不要存储不能被JSON化的数据,比如类、函数、Symbol等· 为了让我们的状态管理能在任何地方使用(不止在setup中),最好统一使用函数的写法,见下第一个参数是全局唯一的键值(就比​

2023-07-14 01:28:06 4503 1

原创 Element-plus 虚拟表格 绑定单元行的双击事件、单击事件 (Vue3、Nuxt3)

​由于做的内容需要渲染大量数据,用原本的表格渲染会十分卡顿,所以选择使用虚拟化表格,官方文档:Virtualized Table 虚拟化表格 | Element Plus (element-plus.org) 但是由于这个表格还是beta版,所以提供的事件也非常少。我做的项目需要实现表格的单击、双击单元行,来进行操作这一行的数据,但是翻阅文档并没有找到这个事件,那么只能自己实现了。想获取点击/双击的单元行的数据,那么我们可以通过获取这个单元行的索引,进而获取数据。那么怎么获得索引呢?我这边是

2023-07-10 17:31:52 3618 3

原创 在Vue3中使用 tsx / jsx + 插槽 (element-plus中的tsx写法与插槽)

​在Vue3中使用 tsx / jsx + 插槽 (element-plus中的tsx写法与插槽)今天在学习使用element-plus的虚拟化表格时,遇到了一个问题,就是需要在表格项中自定义渲染内容(比如渲染一个Tag标签,渲染一个下拉框组件等) 可见官网示例:Virtualized Table 虚拟化表格 | Element Plus (element-plus.org)。在组件标签中有个v-slots属性,给里面传入一个对象,键是插槽名,值是render函数。

2023-07-10 15:08:41 5212 3

原创 JS:自制播放器接入操作系统接口 - Media Session API (可以实现浏览器控制上下首、耳机触控上下首歌曲等)

当我们自制播放器时,和其它大型播放器网站对比就会发现,他们的播放器,可以用操作系统级的控件来操控上下首,而我们做的只能让用户在网页中点击上下首按钮来切歌,如下: 操作系统媒体控件:笔记本电脑的键盘上自带声音控件按钮,点击键盘上的按钮将会在屏幕上显示声音控件。有耳机的还可以用耳机上的触控按钮来切换上下首、手机版的浏览器下拉通知栏也能看到浏览器的音乐控件。这是操作系统级别的操作。下方以戴尔笔记本的声音操作控件为例,对比查看大型播放器和我们的区别。大家也可以用手机浏览器或者耳机尝试。

2023-07-09 14:57:40 433 1

原创 Vue3+ts (nuxt3)使用ref获取dom元素(单个、多个)

直接用字符串的形式即可,不管是多个还是单个,多个会自动放到一个数组里面,而且还能被watch监视。注意需要在挂载后才能拿到这些数据。

2023-07-08 12:29:44 1881

原创 Nuxt3 - 设置网站的图标和标题等

​Nuxt3的更新变化特别大,请对准版本和时间再进行参考他人文章。我的nuxt版本:3.0.0,当前时间为2023.7.7官网文档:SEO and Meta · Get Started with Nuxt在任意一个页面中,使用useHead:​其它方法:使用nuxt.config.ts,不推荐,因为无法动态更改,如何配置可以查阅官方文档。Nuxt3的更新变化特别大,请对准版本和时间再进行参考他人文章。我的nuxt版本:3.0.0,当前时间为2023.7.7。

2023-07-07 11:22:40 1911 1

原创 Nuxt3踩坑记 - 使用keep-alive

Nuxt3的变化太频繁了,很多其他人写的文章都已经失效了。本文章写于2023.7.7,nuxt版本为3.0.0。比如我想让/search是KeepAlive的,那么就是 在/pages/search.vue中,加上这句代码。现在想要让某个页面是keep-alive的,只需要在那个页面中加一句这个代码就行

2023-07-07 11:15:48 1915 5

原创 在服务器部署Next.js、Node.js项目,并实现自动部署(伪CI\CD)超详细

​最近Vercel服务不稳定,经常被墙,还是得整一个自己的服务器呀😭😭😭习惯了vercel的自动部署,那么自己的服务器也得安排上,走起。nuxt项目部署、NextJS项目部署、本文使用Webhook来进行自动部署。本文将带你从0到1进行服务器的配置与项目部署。(next项目部署、nuxt项目部署、node项目部署)超详细

2023-05-06 22:49:26 7419 3

原创 微信小程序判断小程序进入场景值 (含全部场景值的判断代码)

​对于小程序,可以在App的onLaunch和onShow,或wx.getLaunchOptionsSync中获取上述场景值。下方给出示例函数​全部场景值都适配了!

2023-04-18 18:00:57 4521 3

原创 JS把二叉树展示在页面上,二叉树转DOM

支持空节点,且可以连线。在连线的同时,把null的值也展示出来了,这样节点之间的关系也很清晰。为了方便获取真正的二叉树,下面会给出 从层序数组构造二叉树,然后再从树生成展示在页面上的DOM树 的代码。这里的代码比较分散,如果想直接复制代码查看示例的,可以往下滑动到第三点查看。 原理:把二叉树转为层序数组,然后挂载在页面上,使用css的flex布局达成效果,然后再计算节点与其父节点的中心坐标,根据勾股定理算出角度,创建出盒子,利用css3的旋转达成斜线效果

2023-04-15 23:18:27 362

原创 JS层序构造二叉树、JS层序遍历二叉树、JS力扣的二叉树层序数组构建

将层序数组构造为一颗二叉树、将二叉树层序遍历后返回一个层序数组,js和ts代码均有。在力扣刷算法时,给出的二叉树示例都是数组形式,如果想在自己的编译器上编写代码,就需要把数组转换为一颗真正的二叉树,这样才能作为输入示例。TypeScript三、层序遍历二叉树 迭代法关于二叉树节点类 TreeNode 的定义,在上面的代码中有TypeScript

2023-04-12 16:26:58 425

原创 实现Lodash.set 、根据antd的Form.Item组件中的NamePath给对象目标位置赋值

传递NamePath,根据NamePath给对象的目标位置赋值,且不会影响对象中其它属性。antd组件库中的Form.Item属性,可以输入NamePath,会自动填充至对象的目标位置比如一个对象 obj , 想给对象目标位置赋值,如果你知道这个路径是固定的,那当然可以直接通过点语法 obj.a.b 一步步赋值,但是时候,就不能通过点语法了,需要根据用户传入的路径来进行动态赋值,比如一会想给 obj.a.b赋值,一会想给 obj.c.d[2].e赋值。

2023-04-08 18:53:59 1630

原创 原生微信小程序使用u-charts(组件版)折线图示例

之前一直使用的都是 wx-charts,链接:xiaolin3303/wx-charts: 微信小程序图表charts组件 ,但是这个库已经五六年没有维护了。​今天来介绍以下 u-charts 的组件版的基本使用。这篇文章只讲述了折线图的基本使用方法,更多配置项建议阅读官方文档 (链接在文章开头)本文的第四点 进阶用法,是我的踩坑记录:1. 为什么设置了允许滚动,滑动页面没有效果?2.到底怎么获取索引号?为什么官网都是uniapp的演示。

2023-03-10 20:32:23 6009 1

原创 基于movable-view的微信小程序拖拽排序(含源码)

最近在做一个账本,里面有个功能需要“拖拽排序”,网上的代码我也看不太懂,打算自己写一个。微信小程序官方给了一个可移动的盒子movable-view ,基于这个我们来实现一个简单的拖拽排序功能。可以自定义一行展示多少个图标,下面演示一行五个的情况。由于这是我花三个小时写出来的,肯定存在很多不足,欢迎在评论区里不吝赐教!

2023-03-05 16:02:47 3860 8

原创 微信小程序计算器(含源码)、含js精确运算代码

最近在做一个记账本小程序,其中需要用到计算器,但是在网上找的代码,用起来不是不符合我的想法,就是看着非常难受,于是还是自己写了一个。js精确计算、微信小程序计算器、含有源码

2023-03-03 20:10:41 7763 15

原创 js 时间差转年月日时分秒

使用时间戳的差值来计算时间。下面的函数返回两组数据,第一组是转为的 日 - 时 - 分 - 秒 第二组是 转为的 年 - 月 - 日。使用时间戳的差值来计算时间。含含有源代码。含有源代码。含有源代码。含有源代码。

2023-02-08 15:45:36 612

原创 企业微信推送天气、课表、纪念日、每日一句等(含源码和详细步骤)

含源码,稍加配置即可直接使用,没学过编程也没关系。支持推送课表的节次周次位置等信息,纪念日、彩虹屁、天气。使用阿里云函数免费推送

2023-01-25 16:04:01 3089 26

原创 VSCode实用快捷键:复制粘贴内容不改变剪切板等

VSCode里面有很多快捷键,接下来我讲一些我认为最实用的,可以帮助萌新提高代码编写速度。

2023-01-13 17:53:40 11641

原创 超详细 企业微信推送(所有东西都可推送)

最近在研究推送每日课表,一开始是使用 微信公众号接口测试号 来推送的,但是现在公众号消息展示改了,不会显示在消息列表,而是隐藏在“订阅号消息”里面,不仔细看都看不到,很容易被忽略,如下图:所以就一直在找其他方法,想到了企业微信 - 可以显示在微信消息主页,且提醒很明显,如下图。下面讲两种方法进行推送。效果示例。

2023-01-03 16:58:03 21448 15

原创 微信小程序安卓真机下wx.previewImage黑屏

这个问题困扰我很久了,开发者工具和苹果手机正常,但是安卓机会黑屏。不管是http图片还是https图片,都经常遇到黑屏的问题。但是经过研究,我发现了如下规...

2023-01-02 12:35:31 912 2

空空如也

空空如也

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

TA关注的人

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