类组件

理解

字符串形式的ref 优先3

调形式的ref 优先1

{this.input1 = c}}/>

createRef创建ref容器· 优先2

myRef = React.createRef()

代码

  1. class Demo extends React.Component{
  2. /*
  3. React.createRef调用后可以返回一个容器,该容器可以存储被ref所标识的节点,该容器是“专人专用”的
  4. */
  5. createRefSpan = React.createRef(); //方式三 利用createRef
  6. render(){
  7. return (
  8. <div>
  9. <span ref="stringSpan">string</span><br/>
  10. <span ref={c => this.funcSpan = c }>func</span><br/>
  11. <span ref={this.createRefSpan}>createRef</span><br/>
  12. <button onClick={this.btnClick}>Click</button>
  13. </div>
  14. )
  15. }
  16. btnClick = (e) => {
  17. console.log(this);
  18. console.log(this.refs.stringSpan); //方式一
  19. console.log(this.funcSpan);//方式二
  20. console.log(this.createRefSpan.current);//方式三
  21. }
  22. }

函数组件 hook

const myRef = React.useRef()

export default function About()  {
    const myRef = React.useRef()

    function show(){
        console.log(myRef.current.value);
    }

    return(
        <div>
          <input type="text" ref={myRef}/>
                    <button onClick={show}>点我提示数据</button>
        </div>
    )
}

传递ref - forwardRef

获取函数组件不能使用ref, 必须使用 forwardRef 传递ref,把自身的ref绑定到其他地方

//子组件UserForm是函数组件
import React ,{forwardRef,useState,useEffect}from 'react'
const UserForm = forwardRef((props,ref)=> {
})
export default UserForm

//父组件要获取子组件UserForm
export default function UserList() {
  const addForm = useRef(null)

  console.log(addForm.current.resetFields())
  return(
    <UserForm regionList={regionList} roleList={roleList}  ref={addForm}></UserForm>
  )
}