博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二、React中的更新
阅读量:5231 次
发布时间:2019-06-14

本文共 725 字,大约阅读时间需要 2 分钟。

创建更新的方式:ReactDOM.render||hydrate 初次渲染,然后是setState、forceUpdate

一、React.render()

步骤:创建ReactRoot、创建FiberRoot和RootFiber、创建更新,这样我们的应用就到了更新调度。

什么是FiberRoot : 整个应用的起点,包含应用挂载的目标节点,记录整个应用更新过程的各种信息

什么是Fiber:

每一个ReactElement对应一个Fiber对象

记录节点的各种状态。就是说state和props其实不是记录在class Component里面的,而是记录在Fiber中,只有等Fiber更新之后,classComponent才会更新。

串联整个应用形成树形结构。串联成Fiber树,主要是通过child,return, sibling这三个树形进行串联在一起

 更新,setState,forceUpdate 只是在源码中的类型,tag不同。

 

setState 是同步的还是异步的?

setState本身的方法调用是同步的。但是调用setState并不意味着state立马就更新了,这个更新得根据当前执行的上下文环境来判断的。如果是处于批量更新的上下文,则state就不是立马更新的。如果不处于批量更新的情况下,是立马更新的。如果异步更新,需要进入异步调度的过程,就不是立马更新的。

异步调度reactScheduler:维护时间片,模拟requestIdleCallback,调度列表和超时判断。

维护时间片:浏览器每33ms渲染一遍

 

转载于:https://www.cnblogs.com/QianDingwei/p/11079025.html

你可能感兴趣的文章
计算半径为3.0的圆周长和面积并输出结果。把圆周率π定义为常量,半径定义为变量,然后进行计算并输出结果。...
查看>>
什么是JSON
查看>>
cdoj 1255 斓少摘苹果 贪心
查看>>
ACdream 速攻组~
查看>>
常见的选择同意之后才能点击下一步按钮
查看>>
webpack-dev-server disableHostCheck导致 invalid host header
查看>>
SQL Prompt激活
查看>>
Python中常用数字类型
查看>>
binary hacks读数笔记(装载)
查看>>
Luogu P4822 [BJWC2012]冻结
查看>>
一分钟搞定 Android studio 2.3项目升级到3.0
查看>>
way
查看>>
PHP定界符的用法
查看>>
iOS发布证书申请
查看>>
前端性能监控工具
查看>>
第九篇 文件操作
查看>>
NSString的常用代码(转)
查看>>
UVA10719 - Quotient Polynomial
查看>>
OSPFV3实验
查看>>
linux的top命令参数详解
查看>>