React 中的 ref 对象是一个容器,其 .current 属性通常用来持有一个可变值,这个值通常是一个 DOM 元素的引用,但也可以用于存储任何可变的值。ref 的 .current 属性值在组件的生命周期中发生变化的情况如下:
-
创建阶段(Mounting):在组件被挂载到 DOM 上时,如果
ref是通过useRef()Hook 创建的,或者通过React.createRef()在构造器中创建的,它的.current属性会被初始化并指向相关的 DOM 元素或组件实例。例子:当你在 JSX 中绑定了
ref,如<div ref={myRef} />,当这个组件第一次渲染到 DOM 中时,myRef.current将指向这个<div>元素。 -
更新阶段(Updating):在大多数情况下,
ref.current的值在更新阶段是不变的。但如果ref是被动态赋予不同的元素,比如在条件渲染中,其指向的元素可能会改变。例子:如果你有条件渲染,如
{condition ? <div ref={myRef} /> : <span ref={myRef} />},根据condition的值,myRef.current可以在<div>和<span>之间切换。 -
卸载阶段(Unmounting):当组件被卸载从 DOM 中移除时,与该组件相关联的 DOM 元素也会被销毁,此时
ref.current的值会变回初始的null。例子:如果你有一个
<div ref={myRef} />,当这个<div>被卸载时,myRef.current将被设置回null。
要注意的是,ref.current 的值的改变是在 React 的渲染流程之外的,也就是说,改变 ref.current 的值不会触发组件的再渲染。此外,当你直接修改 ref.current 的值时,它也不会触发重新渲染,因为 React 并不监控此类变更。