获得徽章 8
// ts中,可以使用infer关键字拿到输入的类型再输出回来
// 用法简介
type Swap<T extends any[]> = T extends [infer A, infer B] ? [B, A] : T;
type SwapResult1 = Swap<[1, 2]>; // 符合元组结构,首尾元素替换[2, 1]
// 用法简介
type Swap<T extends any[]> = T extends [infer A, infer B] ? [B, A] : T;
type SwapResult1 = Swap<[1, 2]>; // 符合元组结构,首尾元素替换[2, 1]
展开
评论
点赞
一个列表监听键盘事件,切换选中记录。然后顺带滚动滚动条,需要配合document?.activeElement 、focus()、tabIndex三个事件属性来做,记录下。
评论
点赞
赞了这篇文章
赞了这篇文章
赞了这篇文章
下载依赖(如@ant-design/icons太大了)总是失败,可以试试增加如下时间配置:
yarn add @ant-design/icons --network-timeout 600000
yarn add @ant-design/icons --network-timeout 600000
评论
4
线上异常解决法子之chrome映射source-map流程:
1.本地修改config,重新npm run build ,生成source-map
2.起个本地服务, 能访问到具体的map文件,如http://localhost:8080/p__type__index.d578cffa.async.js.map
3.在调试台点击报错的行,添加来源映射,将步骤二的url填入,不用刷新页面,就会将报错异常行显示出来了。
1.本地修改config,重新npm run build ,生成source-map
2.起个本地服务, 能访问到具体的map文件,如http://localhost:8080/p__type__index.d578cffa.async.js.map
3.在调试台点击报错的行,添加来源映射,将步骤二的url填入,不用刷新页面,就会将报错异常行显示出来了。
展开
评论
点赞
赞了这篇文章
赞了这篇文章
React Scheduler 使用 MessageChannel 的原因为:生成宏任务,实现:
将主线程还给浏览器,以便浏览器更新页面。
浏览器更新页面后继续执行未完成的任务。
为什么不使用微任务呢?
微任务将在页面更新前全部执行完,所以达不到「将主线程还给浏览器」的目的。
为什么不使用 setTimeout(fn, 0) 呢?
递归的 setTimeout() 调用会使调用间隔变为 4ms,导致浪费了 4ms。
为什么不使用 rAF() 呢?
如果上次任务调度不是 rAF() 触发的,将导致在当前帧更新前进行两次任务调度。
页面更新的时间不确定,如果浏览器间隔了 10ms 才更新页面,那么这 10ms 就浪费了。
作者:MoonBall
链接:
juejin.cn
来源:稀土掘金
将主线程还给浏览器,以便浏览器更新页面。
浏览器更新页面后继续执行未完成的任务。
为什么不使用微任务呢?
微任务将在页面更新前全部执行完,所以达不到「将主线程还给浏览器」的目的。
为什么不使用 setTimeout(fn, 0) 呢?
递归的 setTimeout() 调用会使调用间隔变为 4ms,导致浪费了 4ms。
为什么不使用 rAF() 呢?
如果上次任务调度不是 rAF() 触发的,将导致在当前帧更新前进行两次任务调度。
页面更新的时间不确定,如果浏览器间隔了 10ms 才更新页面,那么这 10ms 就浪费了。
作者:MoonBall
链接:
来源:稀土掘金
展开
评论
1
赞了这篇文章