Ref 在 React 中返回 undefined 或 null [已解决]
Ref returns undefined or null in React [Solved]
Reactref
最常返回undefined
ornull
当我们尝试current
在呈现其相应的 DOM 元素之前访问其属性时。要解决此问题,请在useEffect
挂钩中或在触发事件时访问 ref。
应用程序.js
import {useRef, useEffect} from 'react'; export default function App() { const ref = useRef(); console.log(ref.current); // 👈️ undefined here useEffect(() => { const el2 = ref.current; console.log(el2); // 👈️ element here }, []); return ( <div> <div ref={ref}> <h2>Hello</h2> </div> </div> ); }
useRef ()钩子可以传递一个初始值作为参数。该钩子返回一个可变的 ref 对象,其.current
属性被初始化为传递的参数。
我们没有将初始值传递给useRef
所以它的current
属性设置为
undefined
。
如果我们传递null
给钩子,它的current
属性将是null
立即访问。
请注意,我们必须访问
current
ref 对象上的属性才能访问我们设置prop的div
元素。 ref
当我们将 ref prop 传递给元素时,例如<div ref={myRef} />
,React 将.current
ref 对象的属性设置为相应的 DOM 节点。
我们使用
useEffect
钩子是因为我们想确保已在元素上设置并且该元素已呈现给 DOM。 ref
如果我们尝试直接在组件中访问 的current
属性ref
,我们会undefined
返回,因为 ref 尚未设置且div
元素尚未呈现。
您还可以在事件处理函数中访问 的current
属性。ref
应用程序.js
import {useRef, useEffect} from 'react'; export default function App() { const ref = useRef(); console.log(ref.current); // 👈️ undefined here useEffect(() => { const el2 = ref.current; console.log(el2); // 👈️ element here }, []); const handleClick = () => { console.log(ref.current); // 👈️ element here }; return ( <div> <div ref={ref}> <h2>Hello</h2> </div> <button onClick={handleClick}>Click</button> </div> ); }
当用户点击按钮时,ref 已经设置好并且相应的元素已经渲染到 DOM,所以我们可以访问它。
结论
Reactref
最常返回undefined
ornull
当我们尝试current
在呈现其相应的 DOM 元素之前访问其属性时。要解决此问题,请在useEffect
挂钩中或在触发事件时访问 ref。