|
|
|
@ -76,12 +76,12 @@ createInstance 会调用 createElement 方法创建一个 DOM 实例,并调用
@@ -76,12 +76,12 @@ createInstance 会调用 createElement 方法创建一个 DOM 实例,并调用
|
|
|
|
|
|
|
|
|
|
### updateHostComponent |
|
|
|
|
|
|
|
|
|
函数内部会对当前 WorkInProgress Fiber 节点的新旧 props 进行对比,如果完全相同会直接返回,这里的完全相同实际上是指引用地址也相同,所以在本次就算新旧 props 相同也并会被 return,然后取出 Fiber 中的 stateNode 传递给 prepareUpdate 函数,然后被调用 diffProperties 函数,这里还有一个针对 props 的 children 属性是否为字符串huo |
|
|
|
|
|
|
|
|
|
### prepareUpdate |
|
|
|
|
函数内部会对当前 WorkInProgress Fiber 节点的新旧 props 进行对比,如果完全相同会直接返回,这里的完全相同实际上是指引用地址也相同,所以在本次就算新旧 props 相同也并会被 return,然后取出 Fiber 中的 stateNode 传递给 prepareUpdate 函数,然后被调用 diffProperties 函数,这里还有一个针对 props 的 children 属性是否为字符串或者数字的判断,暂时还不清楚具体目的是什么 |
|
|
|
|
|
|
|
|
|
### diffProperties |
|
|
|
|
|
|
|
|
|
函数开始会先执行对 props 属性的校验方法:`validatePropertiesInDevelopment` 方法,然后根据 Fiber tag 进入不同的case,这里只有针对三种 tag有特殊的处理,分别是:input、select 和 textarea,本次进入 completeWork 的 Fiber 节点是 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 第二次触发更新和后续触发更新 |
|
|
|
|