大家好,我是Kason。很多朋友知道React中有lane的概念,但是不知道怎么用。React中有不同功能的泳道。这篇文章解释了车道中最重要的一个,让您了解如何使用车道。lane的含义想必看下面的代码就很熟悉了://ForClassComponentonClick(){this.setState({a:100})}//ForFunctionComponentconst[updateNum,num]=useState(0);其中this.setState或updateNum的执行将触发更新。每次更新对应一个通道。所以当我们这样写代码时:onClick(){this.setState({a:100})this.setState({b:'hello'})this.setState({c:true})}会触发很多更新(这些更新将合并在一起,此处未显示)。除了“在一个组件的回调中同时触发多个更新”之外,我们经常会“在不同组件的回调中触发更新”。这两种情况都会产生一个结果:应用程序中同时存在一个或多个通道。这就是lane的意思:他对应update。lane和laneslane对应updates,updates对应status,status对应UI。UI变化通常是多个不同状态变化的结果,一路向后,对应一条或多条车道。如何用一个变量来表达“一条或多条车道”?这是车道。lane和lanes都是“31位二进制”,所以lanes可以很方便的表示“一个或多个lane”,例如:constlaneA=0b0001;constlaneB=0b0010;//lanes===0b0011,lanes包含A和Bconstlanes=laneA|泳道B;root.pendingLaneslanes本身只代表“泳道的集合”,其具体含义需要考虑“构成该集合的泳道的含义”。本文中解释的通道称为root.pendingLanes。对于一个庞大的应用,同时可能有很多组件触发更新,对应很多通道。它们统一存放在root.pendingLanes中。可以认为root.pendingLanes记录的是“应用中所有pendingupdate对应的lanes”。Workflow触发更新时,会将更新对应的lane追加到root.pendingLanes中,意思是“添加了另一条要执行的lane”。接下来React会从root.pendingLanes中选出一批lanes组成lanes,作为本次render需要考虑的lanes(这批lanes对应不同组件的不同update,最终对应UI变化)。接下来开始渲染各个组件。我们知道组件渲染时得到的state就是组件的当前状态,而state的值最终是和lane相关的。所以这一步就是消费lane获取state的过程。最后,在渲染页面时,root.pendingLanes会移除“本次渲染中使用的通道”(即上一步消耗的通道)。重复此操作直到root.pendingLanes为空。这就是root.pendingLanes的工作原理。总结root.pendingLanes只是众多泳道中的一个,但却关系到React的整个更新过程。其他通道都是该过程的一部分。
