React — forwardRef、useImperaiveHandle
forwardRef:获取子组件的DOM元素
React.forwardRef 是 React 提供的一个 API,用于在函数组件中向子组件传递 ref。通过使用 React.forwardRef,我们可以将 ref 传递给函数组件内部的 DOM 节点或其他组件,从而实现对其进行操作。
import { forwardRef } from "react"
const Son = forwardRef((prop,ref)=>{
return <input type="text" ref={ref}></input>
})
const sonRef= useRef(null)
const showRef = ()=>{
console.log(sonRef)
sonRef.current.focus()
}
<div className="box">
<div>
forwardRef
</div>
<div>
<Son ref = {sonRef}></Son>
<button onClick={()=>{
showRef()
}}>foucus</button>
</div>
</div>
useInperaiveHandle:通过ref暴露子组件中的方法
useImperativeHandle 是 React 提供的一个自定义 Hook,用于在函数组件中暴露特定的实例值或函数给父组件。通常情况下,父组件无法直接访问子组件的实例,但通过 useImperativeHandle,子组件可以选择性地暴露一些值或方法给父组件。
import { forwardRef ,useImperativeHandle,useRef} from "react"
const Son = forwardRef((prop,ref)=>{
const inputref = useRef(null)
const inputHandle = ()=>{
inputref.current.focus()
}
useImperativeHandle(ref,()=>{
return {inputHandle}
})
return <input type="text" ref={inputref} ></input>
})
const About= ()=>{
const sonRef = useRef(null)
const sonFocus = ()=>{
// console.log(sonRef)
sonRef.current.inputHandle()
}
return <>
<div>
<Son ref={sonRef}></Son>
<button onClick={sonFocus}>focus</button>
</div>
</>
}
export default About
浙公网安备 33010602011771号