获得徽章 7
- #每天一个知识点#
useEffect 依赖为空数组与 componentDidMount 区别
在 render 执行之后,componentDidMount 会执行,如果在这个生命周期中再一次 setState ,会导致再次 render ,返回了新的值,浏览器只会渲染第二次 render 返回的值,这样可以避免闪屏。
但是 useEffect 是在真实的 DOM 渲染之后才会去执行,这会造成两次 render ,有可能会闪屏。
实际上 useLayoutEffect 会更接近 componentDidMount 的表现,它们都同步执行且会阻碍真实的 DOM 渲染的。展开评论点赞 - #每天一个知识点#
git merge与git rebase的区别
虽然merge和rebase都可以将一个分支的修改合并到另一个分支上,但它们的实现方式和结果有所不同。下面是merge和rebase的区别:
历史记录的形状不同:merge会创建一个新的提交,这个提交包含了两个分支的修改,因此两个分支的历史记录是并行的;而rebase会将当前分支的修改“重演”一遍,因此两个分支的历史记录是线性的。
冲突的处理方式不同:merge会将冲突的修改合并到一个新的提交上,而rebase会将冲突的修改应用到目标分支上。
对分支的影响不同:merge会保留两个分支的名称和历史记录,而rebase会将当前分支的历史记录“移动”到目标分支上。
综上所述,merge和rebase都有各自的优缺点,具体使用哪种方式要根据实际情况而定。如果两个分支的历史记录比较重要,或者有多个人在同时修改同一份代码,那么使用merge可能更好;如果想要保持历史记录的线性,并且希望分支的名称和历史记录更加清晰,那么使用rebase可能更好展开评论点赞 - #每天一个知识点#
useEffect 和 useLayoutEffect 区别
对于 React 的函数组件来说,其更新过程大致分为以下步骤:
因为某个事件 state 发生变化。
React 内部更新 state 变量。
React 处理更新组件中 return 出来的 DOM 节点(进行一系列 dom diff 、调度等流程)。
将更新过后的 DOM 数据绘制到浏览器中。
用户看到新的页面。
useEffect 在第 4 步之后执行,且是异步的,保证了不会阻塞浏览器进程。
useLayoutEffect 在第 3 步至第 4 步之间执行,且是同步代码,所以会阻塞后面代码的执行。展开赞过评论2 - #每天一个知识点#
对函数式编程的理解
总结一下:
函数式编程有两个核心概念。
数据不可变(无副作用): 它要求你所有的数据都是不可变的,这意味着如果你想修改一个对象,那你应该创建一个新的对象用来修改,而不是修改已有的对象。
无状态: 主要是强调对于一个函数,不管你何时运行,它都应该像第一次运行一样,给定相同的输入,给出相同的输出,完全不依赖外部状态的变化。
纯函数带来的意义。
便于测试和优化:这个意义在实际项目开发中意义非常大,由于纯函数对于相同的输入永远会返回相同的结果,因此我们可以轻松断言函数的执行结果,同时也可以保证函数的优化不会影响其他代码的执行。
可缓存性:因为相同的输入总是可以返回相同的输出,因此,我们可以提前缓存函数的执行结果。
更少的 Bug:使用纯函数意味着你的函数中不存在指向不明的 this,不存在对全局变量的引用,不存在对参数的修改,这些共享状态往往是绝大多数 bug 的源头。展开评论点赞 - #每天一个知识点#
setState 同步还是异步
setState 本身代码的执行肯定是同步的,这里的异步是指是多个 state 会合成到一起进行批量更新。
同步还是异步取决于它被调用的环境。
如果 setState 在 React 能够控制的范围被调用,它就是异步的。比如合成事件处理函数,生命周期函数, 此时会进行批量更新,也就是将状态合并后再进行 DOM 更新。
如果 setState 在原生 JavaScript 控制的范围被调用,它就是同步的。比如原生事件处理函数,定时器回调函数,Ajax 回调函数中,此时 setState 被调用后会立即更新 DOM 。展开赞过评论1 - #每天一个知识点#
GET 和 POST 的区别。
从缓存的角度,GET 请求会被浏览器主动缓存下来,留下历史记录,而 POST 默认不会。
从编码的角度,GET 只能进行 URL 编码,只能接收 ASCII 字符,而 POST 没有限制。
从参数的角度,GET 一般放在 URL 中,因此不安全,POST 放在请求体中,更适合传输敏感信息。
从幂等性的角度,GET 是幂等的,而 POST 不是。(幂等表示执行相同的操作,结果也是相同的)
从 TCP 的角度,GET 请求会把请求报文一次性发出去,而 POST 会分为两个 TCP 数据包,首先发 header 部分,如果服务器响应 100(continue), 然后发 body 部分。(火狐浏览器除外,它的 POST 请求只发一个 TCP 包)展开1点赞