一. class组件和React Element使用ref
class Demo extends React.Component {
constructor(props){
super(props);
this.inputRef = React.createRef();
}
componentDidMount(){
this.inputRef.current.focus();
}
handleFocus(){
this.inputRef.current.focus();
}
render(){
return <input ref={this.inputRef} />
}
}
class Demo2 extends React.Component {
constructor(props){
super(props);
this.DemoRef = React.createRef();
}
componentDidMount(){
this.DemoRef.current.handleFocus();
}
render(){
return <Demo ref={this.DemoRef} />;
}
}
二. 函数组件中使用ref
const Demo = function(){
const inputRef = useRef(null);
const handleFocus = ()=>{
inputRef.current.focus();
}
return <input ref={inputRef} />
}
const Demo2 = React.forward((props,ref)=>{
return <input ref={ref} />
})
const Demo3 = ()=>{
const inputRef = useRef(null);
return <Demo2 ref={inputRef} />
}
const Demo2 = React.forward((props,ref)=>{
const inputRef = useRef(null);
useImperativeHandle(ref,()=>{
return {
focus:()=>{inputRef.current.focus();}
};
});
return <input ref={inputRef} />
});