问答

React源码中看到的一处疑惑点

作者:admin 2021-06-14 我要评论

问题描述 代码位于 React 初次 render 时的 batch 逻辑 因为对这些位操作不太熟悉,看了半天也没有搞懂这块逻辑是为了判断什么,有没有对 JS 位操作熟悉的大佬帮...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

问题描述

代码位于 React 初次 render 时的 batch 逻辑

81595854296_.pic.jpg

因为对这些位操作不太熟悉,看了半天也没有搞懂这块逻辑是为了判断什么,有没有对 JS 位操作熟悉的大佬帮忙解释一下

###

首先要理解位运算的规则:

  • a & b:对于每一个比特位,只有两个操作数相应的比特位都是 1 时,结果才为 1,否则为 0
    0b100 & 0b110 = 0b100
  • a | b:对于每一个比特位,当两个操作数相应的比特位至少有一个 1 时,结果为 1,否则为 0。
    0b100 | 0b110 = 0b110
  • ~a :反转操作数的比特位,即 0 变成 1,1 变成 0。
    ~ 0b100 = 0b011

完整的规则列表在这里 按位操作符

下面看具体的示例,假设有两种权限位:

let r    = 0b100 // 读
let w    = 0b010 // 写

&= ~

&= ~ 是删除的意思,a &= ~ b 等价于 a = a & (~b),意为从a 中删除b 举例来看:

let user = 0b110 // user 有 r w 两个权限

想从user 中 删除r权限,先对r 取反

0b100 => 0b011

再和user按位与

0b110
&
0b011
=     
0b010

再看此时的user = 0b010,和w是一样的,而最初的user 为 0b110,兼具w 和 r的权限,现在只剩一个w,实现了删除的效果。

|=

相当于重新赋值,a |= b,等价于 a = a | b。现在为r重新赋予权限:

r |= w

0b100
0b010
=
0b110

此时的r中的1的位置包含了原有的r 和 w中的1的位置。所以新r具有读和写的权限。

以上是对截图中的位操作符的解释,我自己也在看源码,恰巧研究过React完整的位运算,最新的React的master代码已将优先级模型从expirationTime换成了Lanes,涉及到大量的位运算,我做了尽量完整的注释ReactFiberLane.js

希望有所帮助。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • React源码中看到的一处疑惑点

    React源码中看到的一处疑惑点

  • vue-router嵌套的问题

    vue-router嵌套的问题

  • ant design pro第一次打开页面点击菜单

    ant design pro第一次打开页面点击菜单

  • react-ace回报不能执行JavaScript的错,

    react-ace回报不能执行JavaScript的错,

腾讯云代理商
海外云服务器