【发布时间】:2022-01-06 00:47:56
【问题描述】:
根据 react 文档将 refs 传递给子组件的正确方法是这样的:
import React from 'react';
const Input = React.forwardRef((props, ref) => {
React.useEffect(() => {
ref.current.focus();
}, []);
return <input type="text" ref={ref} />;
});
export default function App() {
const inputRef = React.createRef();
return (
<div>
<Input ref={inputRef} />
</div>
);
}
但是,如果我尝试将创建的 ref 作为普通道具以任何其他名称传递,然后是“ref”,这也可以按预期工作。
import React from 'react';
const Input = (props) => {
React.useEffect(() => {
props.inputRef.current.focus();
}, []);
return <input type="text" ref={props.inputRef} />;
};
export default function App() {
const inputRef = React.createRef();
return (
<div>
<Input inputRef={inputRef} />
</div>
);
}
所以问题是,forwardRef 是否做了一些我们用普通道具无法实现的特殊功能?
【问题讨论】:
-
你的例子都错了,需要使用
useRef,搜索createRef vs useRef。其余的在 dup 答案中解释
标签: reactjs react-ref react-forwardref