- 博客(157)
- 收藏
- 关注
原创 一文看懂git reset与git revert
git reset与git revert都是常见的回滚代码的操作,那么它们有何不同呢?本文将通过一系列步骤来研究reset与revert并分析二者区别,所有操作均在main分支进行。
2025-02-09 15:14:53
411
原创 BroadcastChannel:跨标签页通信
目前浏览器跨标签页通信的方式有很多,比如:websocket、针对LocalStorage使用window.onstorage、window.postmessage。本文将用BroadcastChannel实现同一域名下两个标签页间消息的收和发。
2024-05-10 23:55:02
365
1
原创 如何取消xhr / fetch / axios请求
1.从 v0.22.0 开始,Axios 支持以 fetch API 方式—— AbortController 取消请求。2.使用 cancel token 取消一个请求,此 API 从 v0.22.0 开始已被弃用。fetch()请求发送以后,如果中途想要取消,需要使用AbortController对象。
2024-05-06 22:57:52
541
原创 Typescript中的逆变与协变
许多不是很熟悉 TS 的朋友对于逆变和协变的概念会感到莫名的恐惧,没关系。它们仅仅代表阐述表现的概念而已,放心我们并不会从概念入手而是通过实例来逐步为你揭开它的面纱。
2023-09-20 10:29:14
404
原创 IntersectionObserver API实现虚拟列表滚动
的用法,以及如何兼容。如何在React Hook中实现无限滚动。如何正确渲染多达10000个元素的列表。无限下拉加载技术使用户在大量成块的内容面前一直滚动查看。这种方法是在你向下滚动的时候不断加载新内容。当你使用滚动作为发现数据的主要方法时,它可能使你的用户在网页上停留更长时间并提升用户参与度。随着社交媒体的流行,大量的数据被用户消费。无线滚动提供了一个高效的方法让用户浏览海量信息,而不必等待页面的预加载。如何构建一个体验良好的无限滚动,是每个前端无论是项目或面试都会碰到的一个课题。
2023-05-07 18:56:45
2065
8
原创 使用react-bmapgl绘制区域并判断是否重叠
react hook项目使用百度地图如何绘制区域(电子围栏)???如何判断多边形与多边形、多边形与圆形、圆形与圆形是否重叠???
2023-01-16 15:31:08
706
原创 Mac M1使用brew安装nvm
nvm作为node版本管理器,全称,可以管理安装的node和node-sass版本。在macOS系统上的安装步骤如下:*本机使用的是M1芯片,终端配置文件默认使用.zshrc。
2022-12-10 22:01:01
1930
1
原创 Typescript中的高级类型工具
Partial、Required、Readonly、Record、Exclude、Extract、Pick、Omit
2022-11-13 11:05:40
1927
原创 react项目中如何将多个文件压缩成zip下载
假设后端给了你20个文件url,前端如果一次下载一个,下载20次,浏览器底部将非常壮观,这不是一个优秀的前端。优秀的前端很容易想到将这些文件压缩成一个zip,这样就只需要下载一次就够了,设计非常的人性。
2022-10-08 22:31:25
1443
转载 Svelte 官方入门教程(6)—— 绑定
通常,Svelte 中的数据流是 自上而下,父组件可以在子组件上设置 props,而组件可以在元素上设置属性,但反之则不行。App.svelte某些情况亟需打破这种规则。以组件中的 元素为例,我们 可以 为其添加 事件处理程序,在该程序中将 的值设置为 ,不过这样写法有点拖沓累赘,以后在表单元素的情况愈加苦不堪言。好在,我们可以使用 指令:这意味着更改name的值时会更新 input 的值,反之亦然(双向绑定)。App.svelte在 DOM 中的值都是字符串。不能很好地帮助你处理数字输入( 和
2022-08-07 17:19:06
781
原创 使用react-pdf预览pdf
在使用构建的react项目中如何实现预览??如果PDF中包含印章该如何使印章展示出来???我项目中使用的版本为5.2.0。4. 显示印章客户在浏览器中使用开源PDF.JS插件预览签署后的PDF文件时会遇到无法显示电子签章的情况,这是因为PDF.JS因无法进行校验电子签名故而默认隐藏了电子签章。如果需要显示电子签章则需要在中找到以下代码并进行注释或者某些版本的PDF.JS需要在pdf.worker.js中找到如下代码并进行注释最后看下效果图......
2022-07-09 20:45:39
5127
2
转载 Svelte 官方入门教程(5)—— 事件
本章我们专门探讨 Svelte 事件处理。我们来写一个简单的程序,界面上展示鼠标当前所在的坐标:我们此前已经初步了解到,要在元素上监听任意事件,我们可以使用 on: 指令:2、内联事件你也可以用内联的方式声明事件处理:属性值上的双引号其实是可选的,只是某些环境下有助于语法突出显示。DOM 事件处理程序允许使用修饰符来变更行为。例如,对某个处理程序使用修饰符后,这个处理程序只会运行一次:事件修饰符完整的列表:组件也可以发送(dispath)事件。为此,需要创建一个事件分发器(dispatcher)。
2022-06-26 22:32:49
903
转载 Svelte 官方入门教程(4)—— 模板逻辑
先来参看这些代码:App.svelte为了可以按条件渲染某些标记,我们将其放置在 if 块中:App.svelte当然,这仅仅是为了演示,实际上我们知道两个 button 唯一的区别是“out”和“in”两个单词之差,完全可以使用一个 ? 号表达式来替代上述繁琐的 if。由于和这两个条件是互斥的,因此可以使用块来简化它:App.svelte3、Else-If 块假设我们已有如下代码:App.svelte可以使用将多个条件 “连接” 在一起:App.svelte4、each 块如果你需要遍历数
2022-06-05 15:46:39
431
转载 Svelte 官方入门教程(3)—— Props
1、声明组件的 Props到目前为止,我们只处理组件内部的状态,也就是说,这些值只能在给定的组件中访问。在任何实际的应用程序中,您都需要将数据从一个组件传递到其子组件。为此,我们需要为组件声明 属性,通常缩写为 ‘props’。参看下方的子组件 Nested.svelte 及父组件 App.svelteNested.svelte<script> let answer;</script><p>The answer is {answer}</p>
2022-05-24 23:09:19
354
转载 Svelte 官方入门教程(2)—— 反应性
所谓反应性,对应React的状态(Status)或Vue的 data(实际上也是状态)。Svelte 的组件状态,在用户看来,跟普通的 变量 无异:<script> let count = 0; let username = 'anders' let things = 'pens'</script><div>{username} has {count} {thins} </div>而组件状态对应于 Vue,则叫 data:<s
2022-05-21 23:02:29
317
转载 Svelte 官方入门教程(1)—— 简介
在介绍 Svelte 之前,首先解决的要务问题是:Svelte 不是 Servlet,Svelte 是一个前端 Web 框架,而 Java Servlet 与 Svelte 不是一个类型的程序,务请明鉴。如有误入,请出门右转。一、初窥门径花径不曾缘客扫,教程今始为君开。本教程循序渐进,为你倾囊相授如何使用 Svelte 轻松创建快速小巧的应用。如果你想深入精微,探求透彻,不妨随时翻阅 API 文档 及 示例。倘若你现在就迫不及待想在本机上开发,60秒极速入门 正是为你而准备的。本教程所有.
2022-05-16 23:21:09
1864
原创 树数据中根据子节点id查找父节点的id
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document<
2021-11-29 17:07:44
1052
2
原创 js中new关键字的实现原理
// 实现newfunction _new() { let obj = new Object(); // 1. 创建一个空对象 let Con = [].shift.call(arguments); // 2. 获得构造函数 obj.__proto__ = Con.prototype; // 3. 链接到原型 let result = Con.apply(obj, arguments); // 4. 绑定 this,执行构造函数 return typeof result === 'ob
2021-11-29 11:07:44
409
原创 ant-design Upload组件自定义上传
在使用ant-design进行表单开发(注册)的时候遇到需要包含图片数据的提交但是由于是注册,java那边是先有提交的数据后生成新用户,注册时提交的数据没法找到对应的用户因此没有开发图片的上传接口,前端的做法是保存用户注册的数据一次性提交给后端由于没有上传接口也就没有action,改为是有用customRequest自定义上传<Form.Item> <Form.Item name="certificationFiles" valuePropName="fil.
2021-11-22 10:15:10
1954
原创 CSS Grid 网格布局-项目属性
代码地址一. 项目的位置<div class="box"> <div class="item item-1">1</div> <div class="item item-2">2</div> <div class="item item-3">3</div> <div class="item item-4">4</div> <div class="item item-5">5&
2021-11-11 15:28:24
734
原创 CSS Grid 网格布局-容器属性
代码地址一. display: grid<span>foo</span><div class="box"> <div class="item"><p>1</p></div> <div class="item"><p>2</p></div> <div class="item"><p>3</p></div><
2021-11-11 15:17:37
953
原创 CSS Grid 网格布局-基本介绍
概述网格布局(Grid)是最强大的 CSS 布局方案。它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局。以前,只能通过复杂的 CSS 框架达到的效果,现在浏览器内置了。上图这样的布局,就是 Grid 布局的拿手好戏。Grid 布局与 Flex 布局有一定的相似性,都可以指定容器内部多个项目的位置。但是,它们也存在重大区别。Flex 布局是轴线布局,只能指定"项目"针对轴线的位置,可以看作是一维布局。Grid 布局则是将容器划分成"行"和"列",产生单元格,然后指定"项目所在"
2021-11-11 14:10:19
544
转载 垃圾回收机制
我们知道垃圾回收机制是引擎来做的,JS引擎有很多种(各个浏览器都不同),其垃圾回收机制在一些细节及优化上略有不同,本文我们以一些通用的回收算法作为切入,再由 V8 引擎发展至今对该机制的优化为例(为什么以 V8 为例?因为它市场占有率大 ????),一步一步深入来助我们了解垃圾回收机制,因为只有真正了解垃圾回收机制,后面才能理解内存泄漏的问题以及手动预防和优化JavaScript 是门魅力无限的语言,关于它的 GC(垃圾回收)方面,你了解多少呢?想来大部分人是因为面试才去看一些面试题从而了解的垃圾回收,
2021-09-06 11:28:36
302
原创 JS根据二进制数据下载文件
逻辑简单,直接上代码var xhr = new XMLHttpRequest()xhr.open('get', '${ctx!}/admin/v1/licence/' + id)xhr.responseType = "blob" // 设置响应数据类型为blob, 不设置会出现下载的文件比源文件更大xhr.send()xhr.onload = function() { var blob = new Blob([this.response], { type: this.responseType.
2021-08-24 14:32:32
617
原创 js复制文本到剪切板
思路创建文本域,并把需要复制的字符串赋值给value属性选中(聚焦)文本域执行复制操作document.execCommand('Copy')实现/** * @param url 需要复制的字符串 * @param success 复制成功的回调 * @param error 复制失败的回调 */export const copyStr = (url: string, success?: () => void, error?: () => void) => {
2021-08-18 14:03:34
234
原创 自上而下获取父节点的id的集合
自下而上获取父节点的id的集合,包括它自己的id例如:查找根据西湖区的id查找浙江省id,杭州市id,并根据这些id组成一个集合思路从根节点开始递归遍历,直到找到西湖区,每遍历一次就保存一次id实现const getParentIds = <T, K>(treeData: T[], key: K): string[] => { let pids: string[] = []; const fn = (treeData: T[], key: K, id?: string
2021-08-18 13:51:49
214
原创 将列表数据转换为树形数据
问题有的时候接口可能会给你列表数据,如何将列表数据转化为树形数据呢???比如:转换为:思路:递归遍历找到children,如果当前项的pid等于传入的id,说明当前项是传入id对应项的子节点闭包保存每次遍历的children实现一下为ts写法步骤详解const tranListToTreeData = <T, K>(list: T[], rootValue: string): K[] => { // 存放子节点的数据 let arr: K[] = [];
2021-08-18 11:23:57
1690
原创 dva数据流
一个todolist(土豆丝)案例熟悉dva数据流及如何使用dva开发前端项目项目地址:https://gitee.com/JasonShow/todo-dva.gitdva数据流程图浏览器输入地址(路由router)匹配到对应的模块(Model),模块与视图层(View)通过connect连接,将Model里存放的状态传递给View,View使用dispatch将action传递给Model,更改Model里存放的状态,实现数据完整的单向的闭环回路。Model使用dva-cli构建的项目s.
2021-07-22 15:43:10
1532
原创 查找树形数据的某个值
很多场景都需要使用树形数据,比如:一级菜单 - 二级菜单、省-市-区、公司-部门-小组、界-门-纲-目-科-属-种 等等。数据结构通常如下所示(以下代码为ts写法):const groupList: Group[] = [ { groupId: '0', groupName: '江西省', isDefaultGroup: '0', children: [ { groupId: '0-0', groupName: '赣州市.
2021-07-06 15:31:26
1434
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人