React Hooks状态变更触发对应组件重渲染的底层运行机制疑问
React 自定义Hook状态更新触发组件重渲染的机制
你的猜想完全正确,该机制的底层逻辑如下:
- 自定义Hook本质是普通的JavaScript函数,没有任何React专属的特殊标识,所有Hook的绑定逻辑都由React渲染调度器统一维护
- 每次React准备渲染一个函数组件时,会先将全局上下文的「当前渲染组件」指针指向该组件实例,同时加载该组件对应的Hook状态链表
- Hook的绑定只和调用时的当前渲染组件有关,和函数嵌套层级无关:无论
useState/useReducer是直接写在组件体内,还是在嵌套任意层数的自定义Hook内部调用,只要是在当前组件的渲染周期内触发的Hook调用,都会被插入到当前绑定组件的Hook链表中,每个Hook的状态更新函数天生就和所属组件实例绑定 - 当Hook的状态更新函数被调用时,React会直接定位到该Hook绑定的组件,标记为待重渲染,后续调度器会按优先级触发该组件的重渲染流程
比如你在App组件内部调用自定义useFetch Hook时,useFetch内部定义的所有state都会绑定到App组件上,修改这些state触发重渲染的逻辑,和你直接把state定义在App组件体内没有任何差异。
内容的提问来源于stack exchange,提问作者whowhenhow
相关产品推荐
相关产品推荐

