自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一文看懂git merge与git rebase

本文将通过一系列步骤来研究merge与rebase并分析二者区别。

2024-05-22 18:40:50 473

原创 BroadcastChannel:跨标签页通信

目前浏览器跨标签页通信的方式有很多,比如:websocket、针对LocalStorage使用window.onstorage、window.postmessage。本文将用BroadcastChannel实现同一域名下两个标签页间消息的收和发。

2024-05-10 23:55:02 267 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 298

原创 Typescript中的逆变与协变

许多不是很熟悉 TS 的朋友对于逆变和协变的概念会感到莫名的恐惧,没关系。它们仅仅代表阐述表现的概念而已,放心我们并不会从概念入手而是通过实例来逐步为你揭开它的面纱。

2023-09-20 10:29:14 305

原创 找出数组中重复的项

【代码】找出数组中重复的项。

2023-08-20 22:06:06 179

原创 IntersectionObserver API实现虚拟列表滚动

的用法,以及如何兼容。如何在React Hook中实现无限滚动。如何正确渲染多达10000个元素的列表。无限下拉加载技术使用户在大量成块的内容面前一直滚动查看。这种方法是在你向下滚动的时候不断加载新内容。当你使用滚动作为发现数据的主要方法时,它可能使你的用户在网页上停留更长时间并提升用户参与度。随着社交媒体的流行,大量的数据被用户消费。无线滚动提供了一个高效的方法让用户浏览海量信息,而不必等待页面的预加载。如何构建一个体验良好的无限滚动,是每个前端无论是项目或面试都会碰到的一个课题。

2023-05-07 18:56:45 1550 8

原创 过滤树数据

给你一个树数据,如何删除(过滤)一个或多个指定的节点?

2023-04-04 23:12:55 138

原创 React无缝滚动组件

无缝滚动

2023-03-25 22:49:22 1236

原创 使用react-bmapgl绘制区域并判断是否重叠

react hook项目使用百度地图如何绘制区域(电子围栏)???如何判断多边形与多边形、多边形与圆形、圆形与圆形是否重叠???

2023-01-16 15:31:08 583

原创 Mac M1使用brew安装nvm

nvm作为node版本管理器,全称,可以管理安装的node和node-sass版本。在macOS系统上的安装步骤如下:*本机使用的是M1芯片,终端配置文件默认使用.zshrc。

2022-12-10 22:01:01 1817 1

原创 Typescript中的高级类型工具

Partial、Required、Readonly、Record、Exclude、Extract、Pick、Omit

2022-11-13 11:05:40 1863

原创 react项目中如何将多个文件压缩成zip下载

假设后端给了你20个文件url,前端如果一次下载一个,下载20次,浏览器底部将非常壮观,这不是一个优秀的前端。优秀的前端很容易想到将这些文件压缩成一个zip,这样就只需要下载一次就够了,设计非常的人性。

2022-10-08 22:31:25 1195

转载 Svelte 官方入门教程(6)—— 绑定

通常,Svelte 中的数据流是 自上而下,父组件可以在子组件上设置 props,而组件可以在元素上设置属性,但反之则不行。App.svelte某些情况亟需打破这种规则。以组件中的 元素为例,我们 可以 为其添加 事件处理程序,在该程序中将 的值设置为 ,不过这样写法有点拖沓累赘,以后在表单元素的情况愈加苦不堪言。好在,我们可以使用 指令:这意味着更改name的值时会更新 input 的值,反之亦然(双向绑定)。App.svelte在 DOM 中的值都是字符串。不能很好地帮助你处理数字输入( 和

2022-08-07 17:19:06 622

原创 使用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 4750

转载 Svelte 官方入门教程(5)—— 事件

本章我们专门探讨 Svelte 事件处理。我们来写一个简单的程序,界面上展示鼠标当前所在的坐标:我们此前已经初步了解到,要在元素上监听任意事件,我们可以使用 on: 指令:2、内联事件你也可以用内联的方式声明事件处理:属性值上的双引号其实是可选的,只是某些环境下有助于语法突出显示。DOM 事件处理程序允许使用修饰符来变更行为。例如,对某个处理程序使用修饰符后,这个处理程序只会运行一次:事件修饰符完整的列表:组件也可以发送(dispath)事件。为此,需要创建一个事件分发器(dispatcher)。

2022-06-26 22:32:49 664

转载 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 330

原创 memo、useMemo、useCallback总结

如何使用memo、useMemo、useCallback,区别是啥

2022-06-04 13:53:29 753

转载 Svelte 官方入门教程(3)—— Props

1、声明组件的 Props到目前为止,我们只处理组件内部的状态,也就是说,这些值只能在给定的组件中访问。在任何实际的应用程序中,您都需要将数据从一个组件传递到其子组件。为此,我们需要为组件声明 属性,通常缩写为 ‘props’。参看下方的子组件 Nested.svelte 及父组件 App.svelteNested.svelte<script> let answer;</script><p>The answer is {answer}</p&gt

2022-05-24 23:09:19 276

转载 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 256

转载 Svelte 官方入门教程(1)—— 简介

在介绍 Svelte 之前,首先解决的要务问题是:Svelte 不是 Servlet,Svelte 是一个前端 Web 框架,而 Java Servlet 与 Svelte 不是一个类型的程序,务请明鉴。如有误入,请出门右转。一、初窥门径花径不曾缘客扫,教程今始为君开。本教程循序渐进,为你倾囊相授如何使用 Svelte 轻松创建快速小巧的应用。如果你想深入精微,探求透彻,不妨随时翻阅 API 文档 及 示例。倘若你现在就迫不及待想在本机上开发,60秒极速入门 正是为你而准备的。本教程所有.

2022-05-16 23:21:09 1720

原创 树数据中根据子节点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&lt

2021-11-29 17:07:44 988 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 371

原创 ant-design Upload组件自定义上传

在使用ant-design进行表单开发(注册)的时候遇到需要包含图片数据的提交但是由于是注册,java那边是先有提交的数据后生成新用户,注册时提交的数据没法找到对应的用户因此没有开发图片的上传接口,前端的做法是保存用户注册的数据一次性提交给后端由于没有上传接口也就没有action,改为是有用customRequest自定义上传<Form.Item> <Form.Item name="certificationFiles" valuePropName="fil.

2021-11-22 10:15:10 1840

原创 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 661

原创 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 840

原创 CSS Grid 网格布局-基本介绍

概述网格布局(Grid)是最强大的 CSS 布局方案。它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局。以前,只能通过复杂的 CSS 框架达到的效果,现在浏览器内置了。上图这样的布局,就是 Grid 布局的拿手好戏。Grid 布局与 Flex 布局有一定的相似性,都可以指定容器内部多个项目的位置。但是,它们也存在重大区别。Flex 布局是轴线布局,只能指定"项目"针对轴线的位置,可以看作是一维布局。Grid 布局则是将容器划分成"行"和"列",产生单元格,然后指定"项目所在"

2021-11-11 14:10:19 477

转载 垃圾回收机制

我们知道垃圾回收机制是引擎来做的,JS引擎有很多种(各个浏览器都不同),其垃圾回收机制在一些细节及优化上略有不同,本文我们以一些通用的回收算法作为切入,再由 V8 引擎发展至今对该机制的优化为例(为什么以 V8 为例?因为它市场占有率大 ????),一步一步深入来助我们了解垃圾回收机制,因为只有真正了解垃圾回收机制,后面才能理解内存泄漏的问题以及手动预防和优化JavaScript 是门魅力无限的语言,关于它的 GC(垃圾回收)方面,你了解多少呢?想来大部分人是因为面试才去看一些面试题从而了解的垃圾回收,

2021-09-06 11:28:36 270

原创 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 547

原创 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 186

原创 自上而下获取父节点的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 181

原创 将列表数据转换为树形数据

问题有的时候接口可能会给你列表数据,如何将列表数据转化为树形数据呢???比如:转换为:思路:递归遍历找到children,如果当前项的pid等于传入的id,说明当前项是传入id对应项的子节点闭包保存每次遍历的children实现一下为ts写法步骤详解const tranListToTreeData = <T, K>(list: T[], rootValue: string): K[] => { // 存放子节点的数据 let arr: K[] = [];

2021-08-18 11:23:57 1600

原创 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 1440

原创 查找树形数据的某个值

很多场景都需要使用树形数据,比如:一级菜单 - 二级菜单、省-市-区、公司-部门-小组、界-门-纲-目-科-属-种 等等。数据结构通常如下所示(以下代码为ts写法):const groupList: Group[] = [ { groupId: '0', groupName: '江西省', isDefaultGroup: '0', children: [ { groupId: '0-0', groupName: '赣州市.

2021-07-06 15:31:26 1366

原创 防抖

防抖 debounce场景搜索提示如果默认情况下,输入一个字符就触发送一次请求,这样太浪费性能。加入防抖后,指定一个最大触发时间,用户在这个时间内输入内容后,就会重新开始计时,只有超过该时间间隔才会发送请求优势:避免频繁触发事件,导致的性能问题其他场景: window 的 resize / scroll 事件等生活中的例子:乘坐电梯,假设你正在电梯里面 电梯门开始关闭,突然,另一个人进入电梯。这个时候,电梯门打开了,它没有升降。 现在又有一个人要进入电梯,又执行了上述相同的功能

2021-05-10 13:54:06 112

原创 奶奶都看得懂的canvas和svg绘制多边形

前段时间碰到了绘制多边形的场景,做个总结:1. 使用canvas效果图:代码如下:<!--<!DOCTYPE> 声明必须是 HTML 文档的第一行。位于 <html> 标签之前。--><!DOCTYPE html><html><head> <meta http-equiv="Content-type" content="text/html; charset = utf-8"> <title.

2021-02-28 15:33:16 320 1

原创 修改placeholder样式

核心:input::placeholder如果要细分浏览器,则写法如下:input::-webkit-input-placeholder{ /* Chrome */ color:red; background-color: aqua;}input::-moz-placeholder{ /* Mozilla Firefox 19+ */ color:red; background-color: aqua;}input:-moz-placeholde

2021-02-28 14:33:58 199

原创 css自定义鼠标悬停提示

!不需要JS就可以定制化hover效果核心:1. :hover:after2. css的attr()函数举个例子,亲测有效:html:<div title="提示内容">声乐</div>css:div { position: relative;} div:hover:after { position: absolute; margin-left: 10px; padding: 2px 10px; box-shadow: 0 2px 9px

2021-02-28 14:23:37 2200

原创 关于useEffect的一些思考

最近很烦,好久没静下心来学习了,那就学吧,忘却烦心事,学习使我快乐。(龇牙.png)王国会崛起转而复归尘土,太阳会脱落外层变为白矮星,最后的文明也迟早会结束。我最喜欢React的一点是它统一描述了初始渲染和之后的更新。这降低了你程序的熵。——Dan例1:操作步骤:点击增加counter到3点击一下 “Show alert”点击增加 counter到5并且在定时器回调触发前完成问: count值为几???代码如下:function Counter() { const [cou

2020-12-20 23:10:00 632

原创 结合useRef() hook实现按F11进入全屏

最近做react项目碰到个需求:将内容区域全屏现实浏览器为谷歌浏览器核心api:useRef() // 类似于React.createRef()el.webkitRequestFullScreen() // 全屏废话少说,直接上代码:import React, { useRef, useEffect } from 'react'import { Layout, Breadcrumb, message } from 'antd'import style from './index.le

2020-12-01 17:16:44 420

原创 JS实现复制文本功能

核心api:textArea.select(); 代替手动实现自动选中文本document.execCommand("Copy") 复制选中内容到剪贴板,返回值是一个boolean值,如果是 false 则表示操作不被支持或未被启用。了解更多废话少说直接上代码// 1. 创建// 自调用Clipboard函数返回值为一个对象,该对象有一个copy方法,将该对象挂到全局window上,以便在项目的任何地方都能使用window.Clipboard = (function (window, d.

2020-12-01 16:19:06 804

空空如也

空空如也

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

TA关注的人

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