示例
import React, { forwardRef, useImperativeHandle, useRef } from 'react';
const FancyInput = forwardRef((props, ref) => {
const inputRef = useRef();
useImperativeHandle(ref, () => ({
focus: () => {
inputRef.current.focus();
}
}));
return <input ref={inputRef} />;
});
const App = () => {
const fancyInputRef = useRef();
const handleClick = () => {
fancyInputRef.current.focus();
};
return (
<div>
<FancyInput ref={fancyInputRef} />
<button onClick={handleClick}>Focus Input</button>
</div>
);
};
export default App;
注意事项
useImperativeHandle 应该与 forwardRef 结合使用,以便在父组件中访问子组件实例的方法或属性。
- 使用
useImperativeHandle 可以选择性地暴露子组件的方法或属性,而不会暴露所有内部实现细节。