实际上是在外部添加了一个全局数组,不会随着函数组件的销毁而销毁,创建而创建
hook必须写在顶层

1.初始化

把数据放在一个全局数组中,确定一个游标,用于记录数据的位置
image.png

2.第一次渲染

调用useState时,第一次渲染,会将一个set函数放入setters数组中,并且把初始state放入到state数组中.v2-dea7a781aa68d1c89b4a5ef4c2a04f54_r.jpg

3.后续渲染

每一次重新渲染,光标都会重新设为0,然后从对应的数组中读取状态和set函数22.jpg

4.事件处理

每次调用set函数时,set函数将会修改state数组中对应的状态值,这种对应的关系是通过cursor光标来确定的

函数组件usestate的原理 - 图4