目录
调用React.forwardRef()引用转发:引用地址的转发,自动传递ref的一种技术。
//类组件
class ChildInput extends React.Component{
render(){
return(
child input
)
}
}
class FatherForm extends React.Componet{
constructor(){
super()
this.inputRef = React.createRef() //容器:{current:null}
}
callbackRef=(e)=>{
this.inputRef = e
}
handleClick=()=>{
console.log(this.inputRef)//获取到子组件实例
console.log(this.inputRef.current) //获取不到子组件中DOM操作
}
render(){
return(
)
}
}
通过回调函数的方式:给子组件传递一个回调函数callback,子组件通过ref={callback},把子组件具体DOM挂载在父组件上,使得父组件可以获取子组件的值。
class ChildInput extends React.Component{
//this.props = props 自动操作
render(){
console.log(this.props)
console.log(this.props.callbackRef)
return(
child input
)
}
}
class FatherForm extends React.Componet{
callbackRef=(e)=>{
console.log(this) //父组件实例
this.inputRef = e
}
handleClick=()=>{
console.log(this) //父组件实例
//需求:获取子组件中某个DOM
this.inputRef.focus()
}
render(){
return(
)
}
}
注意:函数组件没有this,没有实例的概念,传值依靠props
function ChildInput(props){
render(){
return(
child input
)
}
}
class FatherForm extends React.Componet{
callbackRef=(e)=>{
this.inputRef = e
}
handleClick=()=>{
this.inputRef.focus()
}
render(){
return(
)
}
}
function ChildInput(props){
render(){
return(
child input
)
}
}
function ChildInput2(props,ref){ //子组件添加ref参数接
render(){
return(
child input
// 地址=>{current:null}=>{current:input}
)
}
}
const RefChildInput2 = React.forwardRef(ChildInput2)
class FatherForm extends React.Componet{
constructor(){
super()
this.inputRef1 = React.createRef()
}
callbackRef=(e)=>{
this.inputRef2 = e
}
handleClick=()=>{
//点击input2自动获取焦点
this.inputRef2.focus()
//点击input1自动获取焦点
console.log(thiis)
this.inputRef1.current.focus()
}
render(){
return(
)
}
}