为什么 ref 总是为空?
2019-12-27
3569
我有下面的一个组件,在第一次渲染时我有正确的
ref
来输入,但是我总是得到
null
,在下一次渲染时,请告诉我为什么?
ref
通过 props 传递给输入:
const inputRef = useRef(null);
useEffect(() => {
setTimeout(() => {
if (inputRef.current) {
inputRef.current.focus();
}
});
}, [inputRef]);
render() {
return(
<div>
<FirstComponent />
{({ selectedItem, items }) => (
<SecondCompontnt
inputRef={inputRef}
items={items}
onSelect={onSelect}
value={selectedItem}
/>
)}
</div>
)
}
1个回答
一旦父组件中为其子组件之一提供了
ref
,您就需要应用所谓的
转发引用技术
,如文档所述:
Ref forwarding is a technique for automatically passing a ref through a component to one of its children. This is typically not necessary for most components in the application.
假设父组件中有以下内容:
const childDivRef = useRef(null);
return <>
<ChildComponent ref={childDivRef} />
</>
那么您需要在子组件中拥有以下内容:
import React, { forwardRef } from 'react';
const ChildComponent = forwardRef((props, ref) => {
return <div ref={ref} className="child-component">
<h3>Child component</h3>
</div>
})
如果您需要一个可行的示例,请找到我之前制作的这个 GitHub 存储库: https://github.com/norbittrial/react-forwarding-ref-example
我希望这个有帮助!
norbitrial
2019-12-27