封面图

TypeScript 里 infer 常见用法

2025-12-03
阅读 2 分钟
1.3k
封面图

【React源码阅读】React 渲染流程 —— 前置知识

2025-12-03
阅读 6 分钟
1.1k
系列文章:【React 源码阅读】为什么 React Hooks 不能用条件语句来执行?【React 源码阅读】useCallback【React 源码阅读】Scheduler1 写在前面React 源码里的概念实在是太多了,以至于如果真的要能完全理解源码的话,我们就不得不提前了解一部分知识,不然看源码的时候完全就是抓瞎。2 Fiber2.1 为什么要有 Fiber想象...
封面图

LeetCode 偶尔一题 —— 301. 删除无效的括号

2025-12-03
阅读 3 分钟
1.3k
原题:[链接]1 题目给你一个由若干括号和字母组成的字符串 s ,删除最小数量的无效括号,使得输入的字符串有效。返回所有可能的结果。答案可以按 任意顺序 返回。示例 1: {代码...} 示例 2: {代码...} 示例 3: {代码...} 提示:1 <= s.length <= 25s 由小写英文字母以及括号 '(' 和 ')' 组成s 中至多含 20 个括...

封面图

【React 源码阅读】Scheduler

2025-07-04
阅读 18 分钟
1.3k
React 在 18 版本引入了 Concurrent 模式,而这个模式则是用 Scheduler 这个包实现的。在这篇文章里,我们来看下它的实现原理是什么。

【持续更新中】ahooks 源码阅读系列

2025-07-04
阅读 14 分钟
1.1k
ahooks 是一个 React 里高频使用的 hook 库,里面封装了一些比较方便 hook,比如说 useMount、useMemoizedFn 等等。停留在使用的阶段还是只知其然而不知其所以然,在需要做一些优化的场景下看到这些东西就会一脸懵逼。\因此,本篇文章希望从源码的角度来剖析一下 ahooks 内各种 hook 的实现原理,帮忙自己和大家更深刻的...

【React 源码阅读】useCallback

2025-07-04
阅读 4 分钟
1.1k
初入 React Hooks 的小伙伴可能比较疑惑,为什么 useCallback 这个 Hook 每次写一个都要传入相应的 deeps 呢?,简直不要太麻烦了。

【React 源码阅读】为什么 React Hooks 不能用条件语句来执行?

2025-03-14
阅读 10 分钟
1.6k
原文1. 背景有 React Hook 使用经验的小伙伴应该知道,如果使用 hooks 之时用了条件语句,那么编辑器通常会有报错:会报错是一样,React Hooks 必须要确保在每一次渲染的时候执行顺序都是一样的。但是,为什么有这么「奇怪」的规定呢?2. React Hooks 源码解读2.1 renderWithHooks顾名思义,这个函数会在渲染阶段执行。...
封面图

[macOS] 用 快捷指令 + ffmpeg 进行视频格式转换

2024-06-09
阅读 2 分钟
2.6k
1. 背景有些时候我们不得不对视频做一些格式转换,有可能是以下原因的其一或者多个:当前视频过大,需要转换成体积小的视频视频格式不兼容,需要转换成更加通用的格式,如 mp4……2. 视频转换方案2.1 方案1、使用格式转换软件比较常见的方案,就是使用一些格式转换软件,比如说格式工厂。有一些视频播放软件本身可能也会提...
封面图

D3.js —— 绘制饼图

2023-02-12
阅读 6 分钟
4.1k
上一篇文章我们完整实现了一个柱状图,并且提到了一个比例尺的概念。这篇文章我们继续来学习 D3.js,但是呢是用它来绘制一个饼图。那么废话不多说,我们正式开始🏃
封面图

D3.js —— 绘制柱状图(二)

2023-02-10
阅读 3 分钟
2.3k
上一篇文章 我们讲了 D3.js 中一些常见的 API,并且通过一个 demo 了解了 D3.js 是如何工作的。铺垫完之后,这篇文章我们正儿八经的来实现一个柱状图。
封面图

D3.js —— 绘制柱状图(一)

2023-02-04
阅读 6 分钟
2.4k
D3.js 是一个基于 JavaScript 开发的库,主要是用于在浏览器中操作 SVG、HTML、CSS ,通常我们可以利用它来进行一些图表绘制的工作。
封面图

盘点那些 React Hooks 里常见的问题

2021-06-11
阅读 4 分钟
3.5k
实际使用中有时候会碰到 Infinite Chain Of Update 这个报错,其实就是你的一段代码引发了「死循环更新」。下面我们来看几个例子👇
封面图

泛型工具及实现

2021-06-06
阅读 3 分钟
2.9k
可实现的泛型工具Pick定义From T, pick a set of properties whose keys are in the union K大意:从 T 中挑出一些属性集合 K 来组成新的类型,举个例子: {代码...} 源码 {代码...} Exclude定义Exclude from T those types that are assignable to U大意:从 T 中剔除一些属性,举个例子: {代码...} ⚠注意这里 Child ...
封面图

JavaScript 事件机制

2021-05-05
阅读 2 分钟
2.6k
点击、滚动、触摸、拖拽……这些用户与 web 页面交互的手段都可以称之为「事件」,了解 JavaScript的事件机制,无论是对优化一些用户交互亦或是处理线上 BUG 都会有很大的帮助。
封面图

盘点常见的JSON用法

2020-09-05
阅读 2 分钟
2k
JSON 是什么?JSON 是一种语法,可以用来序列化对象、数组或者数字等数据类型。换句话说,我们可以利用 JSON 来将数据转成字符串的形式。常见的 APIJSON.parse功能还原被序列化的数据(反序列化),即将字符串还原为它本来的数据结构。参数text,即将要被「反序列化」的字符串reviver,处理字符串的回调函数,可以参与到...
封面图

盘点那些常见的 JS 数组方法及 Polyfill

2020-09-05
阅读 4 分钟
2.9k
前言虽然有时候遍历数组只需要 for 循环则足矣,但是如果 API 利用得当,往往能更大程度的提高代码的可读性,减少心智负担~常见的数组 APIArray.prototype.some功能判断数组中是否至少有一个项通过了预设的条件,结果返回 boolean。参数callback:执行的回调函数,用于条件判断。thisArg:执行函数的 this 指针。场景判...

LeetCode偶尔一题 —— 53. 最大子序和

2019-11-15
阅读 2 分钟
2.1k
这道题其实可以直接从题目提供的输入输出着手,对于输入为:[ -2, 1, -3, 4, -1, 2, 1, -5, 4 ] 的详细分析如下:

LeetCode偶尔一题 —— 1. 两数之和

2019-10-25
阅读 2 分钟
2k
题目描述? 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 题目剖析? 一、 暴力搜索 双层循环,尝试每一个可能的和 找到 nums[i] + nums[j] === target时返回 [i, j...

LeetCode偶尔一题 —— 461. 汉明距离

2019-10-07
阅读 1 分钟
2k
原题地址:[链接] repo 地址: [链接] 题目剖析? 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。 比如说存在这样两个二进制数值: 001 100 它们之间的汉明距离就是 2,我们要求的就是两个二进制数值中位数不一样的地方,比如你是 1 他是 0,那么汉...

LeetCode偶尔一题 —— 430. 扁平化多级双向链表

2019-09-22
阅读 2 分钟
2.2k
遇到问题我们首先要先搞清楚问题到底是什么,然后再想办法解决。对于 链表 的问题其实大部分都不算难,写代码之前最好动动笔在纸上画一下,思路便会清晰很多。

LeetCode偶尔一题 —— 908. 最小差值 I

2019-09-16
阅读 1 分钟
2.5k
给出一个整数 k,找到一个整数 x 且整数 x 满足 -k <= x <= k,与 A[i] 相加之后得到数组 B。我们得到的就是数组 B 中最大值与最小值的最小差值

LeetCode偶尔一题 —— 14. 最长公共前缀

2019-09-03
阅读 1 分钟
1.9k
原题地址:[链接] 题目描述 分析题目 对于这道题最直观的感觉就是: 找到第一个字符串 target 进行按列的水平扫描 我的代码如下: {代码...} 时间复杂度:O(s),s = m + n(s就是总的字符串的长度) 空间复杂度:O(1) 当然,这道题还有其他解法,比如二分法、分治法,官方题解 已经写得非常细致了,这里就不重复写了。 ...

【干货】前端进阶应该知道的这些调试方法

2019-08-31
阅读 3 分钟
3k
平时工作量大并且很忙,也就意味着难免会在写代码的时候一不小心写出BUG。如果测试一旦没有测到,代码上到现网往往就是事故,很多同学在这种时候手忙脚乱,不知道怎么调试解决。本文就这点主要讲一下平时前端调试用的那些方法,希望能够给到大家帮助。

LeetCode偶尔一题 —— 832. 翻转图像

2019-08-19
阅读 2 分钟
2.1k
题目描述 分析题目 按照题意我们只要先对每个子数组先做逆序,再做 0 --> 1 和 1 --> 0 的替换即可,于是我们可以写出以下代码: {代码...} 优化 对于 0 --> 1 和 1 --> 0 的替换,我们大可不必用三元运算符,而是采用异或运算,可以把代码简化如下: {代码...} 进阶 仔细观察题目中提供的测试用例,我们发...
封面图

TypeScript 入门指北(二)

2019-08-16
阅读 3 分钟
2.1k
上篇文章我们提到了为什么要学 TypeScript, 以及通过 TypeScript 跟 JavaScript 的简单对比,熟悉了 TypeScript 一些较为基础的语法。
封面图

TypeScript 入门指北(一)

2019-08-14
阅读 4 分钟
2.3k
随着前端在各种类型的项目中扮演的角色越来越重要,人们发现 JavaScript 这门弱类型语言已经不能满足当下的需求,尤其是在一些大中型项目中,JavaScript 远远没有一些强类型语言用得顺手,而 TypeScript 因此诞生。

LeetCode偶尔一题 —— 64. 最小路径和

2019-07-30
阅读 2 分钟
2.2k
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。示例:

LeetCode偶尔一题 —— 268. 缺失数字

2019-07-26
阅读 2 分钟
2k
题目描述 给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。 示例 1: 输入: [3,0,1] 输出: 2 示例 2: 输入: [9,6,4,2,3,5,7,0,1] 输出: 8 最简单的解法 刚看到的这道题的时候,第一感觉就是排序,之后直接挨个比较就能找到缺失的数字。时间复杂度:O(nlog(n)),空间复杂度:O(1)...

LeetCode偶尔一题 —— 19. 删除链表的倒数第N个节点(链表系列)

2019-07-25
阅读 1 分钟
1.8k
给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5.

LeetCode偶尔一题 —— 39. Combination Sum(回溯算法系列)

2019-07-03
阅读 2 分钟
2.8k
Given a set of candidate numbers (candidates) (without duplicates) and a target number (target), find all unique combinations in candidates where the candidate numbers sums to target. The same repeated number may be chosen from candidates unlimited number of times. Note: All numbers (including ta...

根据调试工具看Vue源码之虚拟dom(三)

2019-06-10
阅读 9 分钟
2.5k
上次我们提到的 _render 函数其实作为 _update 函数的参数传入,换句话说,_render 函数结束后 _update 将会执行?

我在移动端上遇到的那些疑难杂症

2019-06-08
阅读 2 分钟
2.2k
工作一年多了,相信在座的各位前端也都跟我一样,对在手机上,特别是iphone上出现的各种兼容性感到非常头疼。这篇文章仅作为一份记录供大家参考。

根据调试工具看Vue源码之虚拟dom(二)

2019-05-12
阅读 5 分钟
2.4k
上回我们提到,在子组件存在的情况下,父组件在执行完created钩子函数之后生成子组件的实例,子组件执行created钩子函数,同时也检查是否也有子组件,有则重复父组件的步骤,否则子组件的dom元素渲染

深入了解Vue响应式系统

2019-04-26
阅读 8 分钟
3.3k
前面几篇文章一直都以源码分析为主,其实枯燥无味,对于新手玩家来说很不友好。这篇文章主要讲讲 Vue 的响应式系统,形式与前边的稍显不同吧,分析为主,源码为辅,如果能达到深入浅出的效果那就更好了。

根据调试工具看Vue源码之虚拟dom(一)

2019-04-02
阅读 7 分钟
3.2k
createElement 到底会返回什么呢?其实不是一个实际的 DOM 元素。它更准确的名字可能是 createNodeDescription,因为它所包含的信息会告诉 Vue 页面上需要渲染什么样的节点,及其子节点。我们把这样的节点描述为“虚拟节点 (Virtual Node)”,也常简写它为“VNode”。“虚拟 DOM”是我们对由 Vue 组件树建立起来的整个 VNode ...