React Hook源码解析(三)-原创手记-天哥SEO
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

React Hook源码解析(三)

Coy_Pan
关注TA
已关注
手记 25
粉丝 12
获赞 119

ID: 符合预期的CoyPan
CoyPan,BAT某厂符合预期的FE,正努力成为一名出色的工程师

写在前面

前两篇文章,深入了Hook的源码。本文将以useStateuseEffect为主,总结一下Hook的相关内容,

先贴出示例代码:

const App = () => {

    const [title, setTitle] = useState('');
    const [fontSize, setFontSize] = useState('13');

    useEffect(() => {
       document.title = title;
    },[title]);

    useEffect(() => {
        document.body.style.fontSize = `${fontSize}px`;
    }, [fontSize]);

    return <React.Fragment>
        <input value={title} onChange={e => setTitle(e.target.value)} />
        <input value={fontSize} onChange={e => setFontSize(e.target.value)} />
        <p>Hello World</p>
    </React.Fragment>
};

组件初次挂载

图片描述

组件首次挂载的时候,依次执行四行useXXX的代码,生成4个hook对象,按照顺序形成完整的hook链,挂载在Fiber对象的memorizedState属性上。hook对象上的memorizedState属性表示当前hook对象的值。对于effect-hook,其memorizedState属性的值为一个对象(effect对象),包含了一个指向下一下effect-hook的effect对象的指针,会形成一个环形链表。

组件更新

对于state-hook,其setState函数通过闭包保存了对应的hook对象的引用。调用setState对状态值进行更新时,每调用一次setState,都会修改hook对象上的queue属性。queue属性保存着hook的更新信息。setState执行完后,对应的hook对象上的memorized值就是最新的了。

对于effect-hook,每次组件渲染时,都会进入effect-hook的逻辑:首先判断deps数组内的值较上一次有无变化。如果无变化,则会给该effect打上忽略的tag。如果跟上一次组件渲染时有变化,最终会先执行destory函数(即useEffect中return的函数),然后执行create函数。

对于副作用,react每次都会生成新的effect链,如果deps数组内的值变化了,那么新的effect对象还会赋值给effect-hookmemorizedState属性。

本例中,假设我们在title那里,输入了hello,组件更新完成后,Fiber节点上的hook信息如下:

图片描述

总结

稍微总结一下,关于react hook,我们需要知道以下几点:

1、react hook大量采用了链表的结构。

2、代码中hook的书写顺序,决定了最终hook在fiber上的存储顺序。

3、组件每次渲染的时候,hook的代码都会执行一次,并且将上一次的hook对象都clone一遍,返回最新的hook的state以及对应的更新函数。在state的更新函数中,以闭包的形式保存了对应hook对象的引用。

写在后面

至此,react hook源码解析系列暂时告一段落了。尽管有许多地方没有我还没完全理解,有的地方也没有讲述清楚,但是对react hook的整体实现方式已经有了进一步深入的理解了。符合预期。最后,推荐一篇hook相关的文章:

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP

相关内容推荐

网警对关键词龟苓膏淘宝关键词模拟灯光关键词主要关键词在哪复古袜关键词关键词 cover 学生至尊这是关键词漫画同人关键词饮品潮流关键词英文关键词后面商品提炼关键词地域化关键词关键词是DJ社区扫雪 关键词怎样投放关键词英语高级关键词番茄推关键词血染钟楼关键词仁王关键词朱雀娃关键词PQDT关键词检索关键词的并列末世王者关键词墨梅的关键词企业情怀关键词要紧的关键词定制书包关键词52个关键词托盘搜索关键词案例关键词分析影像创作关键词qq行业关键词内脏学关键词weather作文关键词商品关键词种类抗衰老关键词国债的关键词广州关键词工具国庆关键词英文欧美gv关键词上海名媛关键词关键词待优化发卡小众关键词信息匹配关键词关键词神榜个人感想关键词关键词 审核元素激活关键词大全书本关键词设置关键词研究教程wallpaper跳舞关键词活动促销关键词淘宝关键词辣椒果树苗关键词免费来路关键词ai关键词盔甲无锡关键词seo幼教2022关键词关键词起名在线活动现场关键词文化关键词舞蹈求婚创意关键词搜索关键词甜品《草原》的关键词待产包关键词作文漏了关键词水泥护栏关键词关键词趣味课堂好看饭盒关键词高干文学关键词十八前关键词法治摘要关键词excel关键词对比尤勇张瑜关键词保山关键词营销全文关键词查询1688屏蔽关键词受戒的关键词末尾关键词重读关键词第几页涉枪爆关键词海峡卫视关键词关键词抓域名推理大师关键词uc关键词链接关键词排版特效关键词 钢琴版4438挖掘关键词塔罗牌 恋人关键词2018军队关键词童话提炼关键词宝宝柜关键词关键词墙生成演员培养关键词职场奋斗关键词2017园林关键词高考关键词故事网络歌手关键词女装热卖关键词歌曲 关键词 教学车圈关键词大全日本老师关键词介绍叔叔关键词鞋子关键词男士1688关键词推荐申论关键词寻找宝格丽的关键词锁定关键词 英语ins水杯关键词淘宝关键词少ueditor 关键词高亮即使对应关键词聚氨酯钢管关键词关键词大体方向影视概念关键词aj壁纸关键词关键词很丧暖鞋关键词活动目标关键词雨伞关键词德语论文关键词太少关键词 作文 范文误杀2关键词筷子的关键词李世民关键词讲解新闻关键词春游淘宝儿童关键词文具的关键词关键词纯人声关键词活动周关键词i下拉扫把类目关键词音乐推荐关键词关键词出价最少美股关键词酒瓶的关键词服务意识关键词结核健康关键词小众衣裤关键词0.8倍关键词2017园林关键词tumblr裸男关键词selfish giant 关键词宁都关键词优化bert 关键词提取整型的关键词厨房的关键词ICU床关键词黑河优化关键词作品关键词违规东胜关键词推广粉笔搜索关键词窗台垫子关键词媒体宣传关键词2020目标关键词怎么拓关键词产品关键词下载意见ai 关键词简历屏蔽关键词年终关键词记录ai狗关键词关键词列表表竞价关键词探秘自闭的关键词海外aso关键词ehentai站关键词关键词密度修改万市关键词度娘关键词搜索夏季关键词seo关键词越多关键词估价app定位产品关键词eBay关键词获取关键词吧唧收纳外科护理关键词关键词储能不要漏关键词wallpaper几个关键词消费争议关键词项链推广关键词男帽关键词媒体融合关键词mj美食关键词shopee关键词权重看书搜索关键词旅游关键词划分搜索文本关键词关键词旋转木马雅思和关键词来宾360关键词公文格式 关键词SurTime亚马逊关键词golang屏蔽关键词订书器关键词形象容貌关键词关键词只要才宝格丽的关键词桃子ip关键词小方领关键词

合作伙伴

天哥SEO

www.lyhbj.cn
www.bbswimming.cn
www.te3.com.cn
www.haowangjiao.cc
seo.jsfengchao.com
seo.07yue.com
seo.07yue.com
www.haowangjiao.cc
idc.urkeji.com
seo.chaoshanxing.com
www.youpinhui.vip
www.lpjfm.cn
www.3phw.com
www.clhczx.cn
www.xm5656.cn
www.chaoshanxing.com
www.chaoshanxing.com
www.ddtxly.cn
jl.urkeji.com
www.he1tech.com