在React函数式组件中,可以通过使用forwardRef
函数和useImperativeHandle
钩子来将ref
从父组件传递到子组件。
首先,在父组件中创建一个ref
对象,并将其传递给子组件作为属性。然后,在子组件中使用forwardRef
函数来接收并转发ref
。
以下是一个示例代码:
// 父组件
import React, { useRef } from 'react';
import ChildComponent from './ChildComponent';
function ParentComponent() {
const childRef = useRef(null);
// 在父组件中使用ref
const handleClick = () => {
childRef.current.focus();
};
return (
<div>
<button onClick={handleClick}>聚焦子组件</button>
<ChildComponent ref={childRef} />
</div>
);
}
export default ParentComponent;
// 子组件
import React, { forwardRef, useImperativeHandle, useRef } from 'react';
const ChildComponent = forwardRef((props, ref) => {
const inputRef = useRef(null);
// 在子组件中使用ref
useImperativeHandle(ref, () => ({
focus: () => {
inputRef.current.focus();
}
}));
return <input type="text" ref={inputRef} />;
});
export default ChildComponent;
在上面的示例中,父组件通过useRef
创建了一个childRef
对象,并将其传递给子组件ChildComponent
。在子组件中,使用forwardRef
函数来接收ref
,并使用useImperativeHandle
钩子来定义子组件暴露给父组件的方法。在这个例子中,子组件中的input
元素被聚焦时,父组件可以通过调用childRef.current.focus()
来实现。
这种方式可以在函数式组件中传递ref
,并且可以在子组件中使用ref
来访问子组件的DOM元素或者自定义方法。
领取专属 10元无门槛券
手把手带您无忧上云