react 渲染key 为什么不用index?
底层原因在 react 渲染的时候,虚拟dom,也就是 fiber 节点并不会删除,而是先存储到一个 map 结构里面,在渲染同级节点的时候看有没有复用,然后删除定义的 map 中对应 key 的值。最终还存储在 map 里的节点直接在 浏览器dom 中删除。下面是部分源码。 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551...
call、apply和 bind 实现
call、bind 和 apply 的介绍三者的作用都很类似,都是改变函数的 this 指向但是 call 和 apply 用来改变 this 并立即调用函数;bind 用来返回一个永久绑定 this 的新函数。 实例: 展开 / 收起示例代码123456function greet(greeting, punctuation) { console.log(greeting + ', ' + this.name + punctuation);}const person = { name: 'Alice' };const anotherPerson = { name: 'Bob' }; call 改变 this 并立即调用 123greet.call(person, 'Hello', '!');// 输出:Hello, Alice! apply 改变 this 并立即调用(调用参数不同) 123greet.apply...
axios 学习源码-Axios类(1)
今天带来 axios 学习源码(1),主要分析 Axios 类的实现。 整体结构在学习 axios 源码时,我们先从 Axios 的整个项目结构开始下面是 axios 主要目录结构 12345678910111213141516171819202122232425axios├── lib // 核心源码(ESM),包含请求管线、适配器、默认配置与工具│ ├── core // 核心流程与类:请求派发、拦截器、配置合并、数据与头部处理│ ├── adapters // 环境适配层:Node(http)、浏览器(xhr)、Fetch;含适配器解析与选择│ ├── defaults // 全局默认配置与请求/响应转换策略、XSRF、超时等│ ├── helpers // 通用工具:URL/参数序列化、FormData 转换、Cookies、节流测速等│ ├── cancel // 取消机制:CancelToken/CanceledError/isCancel│ ├── platform // 跨环境抽象:浏览器/Node 的 FormData、Blob、URLS...