createRef 和 useRef
2023-01-17 18:35:34
createRef
createRef 底层只做了一件事,就是创建了一个对象,在对象的 current 属性保存获取的 DOM 元素
js
export function createRef() {
const refObject = {
current: null
}
return refObject
}
1
2
3
4
5
6
2
3
4
5
6
useRef
由于函数组件每次更新都是一次新的开始,所有变量重新声明,所以 useRef 不能像 createRef 把 ref 对象直接暴露出去,如果这样每一次函数组件执行就会重新声明 Ref,此时 ref 就会随着函数组件执行被重置,hooks 和函数组件对应的 fiber 对象建立起关联,将 useRef 产生的 ref 对象挂到函数组件对应的 fiber 上,函数组件每次执行,只要组件不被销毁,函数组件对应的 fiber 对象一直存在,所以 ref 等信息就会被保存下来