当前位置: 首页 > article >正文

ref用法

 

目录

React中提供两种方法创建ref对象:

类组件获取 Ref 三种方式

① Ref属性是一个字符串。

② Ref 属性是一个函数。

③ Ref属性是一个ref对象。

高级用法1:forwardRef 转发 Ref

高级用法2:ref实现组件通信


【ref作用】:最熟悉的就是  用 Ref 获取真实 DOM 元素和获取类组件实例,除此之外的功能,ref 派生出一些其他的高级用法,能够解决一些特殊场景下的问题

React中提供两种方法创建ref对象:

        第一种: 类组件中  React.createRef 创建一个 ref 对象。

class Index extends React.Component{
    constructor(props){
       super(props)
       this.currentDom = React.createRef(null)
    }
    componentDidMount(){
        console.log(this.currentDom)
    }
    render= () => <div ref={ this.currentDom } >ref对象模式获取元素或组件</div>
}

        第二种:函数组件中  React.useRef 创建 Ref

export default function Index(){
    const currentDom = React.useRef(null)

    React.useEffect(()=>{
        console.log( currentDom.current ) // div
    },[])

    return  <div ref={ currentDom } >ref对象模式获取元素或组件</div>
}

【什么是 ref 对象,所谓 ref 对象就是用 createRef 或者 useRef 创建出来的对象】

【问:在函数组件中为什么不能用 createRef ?】
        答:类组件有一个实例 instance 能够维护像 ref 这种信息,但函数组件每次更新时所有的变量都会重新声明,此时 ref 就会随着函数组件执行被重置。


类组件获取 Ref 三种方式

  • ① Ref属性是一个字符串。
/* 类组件 */
class Children extends Component{  
    render=()=><div>hello,world</div>
}


/* TODO:  Ref属性是一个字符串 */
export default class Index extends React.Component{
    componentDidMount(){
       console.log(this.refs)
    }
    render=()=> <div>
        <div ref="currentDom"  >字符串模式获取元素或组件</div>
        <Children ref="currentComInstance"  />
    </div>
}

React 在底层逻辑,会判断类型,如果是 DOM 元素,会把真实 DOM 绑定在组件 this.refs (组件实例下的 refs )属性上,如果是类组件,会把子组件的实例绑定在 this.refs 上。(函数组件没有实例,不能被 Ref 标记)

  • ② Ref 属性是一个函数。
class Children extends React.Component{  
    render=()=><div>hello,world</div>
}

/* TODO: Ref属性是一个函数 */
export default class Index extends React.Component{
    currentDom = null
    currentComponentInstance = null

    componentDidMount(){
        console.log(this.currentDom)
        console.log(this.currentComponentInstance)
    }
    render=()=> <div>
        <div ref={(node)=> this.currentDom = node }  >Ref模式获取元素或组件</div>
        <Children ref={(node) => this.currentComponentInstance = node  }  />
    </div>
}

  • ③ Ref属性是一个ref对象。
class Children extends React.Component{  
    render=()=><div>hello,world</div>
}

export default class Index extends React.Component{
    currentDom = React.createRef(null)
    currentComponentInstance = React.createRef(null)

    componentDidMount(){
        console.log(this.currentDom)
        console.log(this.currentComponentInstance)
    }

    render=()=> <div>
         <div ref={ this.currentDom }  >Ref对象模式获取元素或组件</div>
        <Children ref={ this.currentComponentInstance }  />
   </div>
}

高级用法1:forwardRef 转发 Ref

高级用法2:ref实现组件通信


http://www.kler.cn/a/229770.html

相关文章:

  • Llama2大模型开源,大模型的Android时代来了?
  • 如何更改默认浏览器?
  • 2024-02-01(Hive)
  • java -jar启动SpringBoot项目时配置文件加载位置与优先级
  • Python学习路线 - Python高阶技巧 - 拓展
  • QT 应用程序中集成浏览器
  • MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(1)-后端项目框架搭建
  • 【Jenkins】配置及使用|参数化|邮件|源码|报表|乱码
  • 已解决org.springframework.context.ApplicationContextException异常的正确解决方法,亲测有效!!!
  • 安全通信设置:使用 OpenSSL 为 Logstash 和 Filebeat 提供 SSL 证书
  • 编程笔记 html5cssjs 081 JavaScript 异常处理语句
  • 安卓SurfaceTexture中updateTexImage使用及源码分析
  • 二叉树的详解
  • 百面嵌入式专栏(面试题)驱动开发面试题汇总1.0
  • 什么是边缘计算?
  • 米贸搜|关于Facebook广告受限:在这些情况下,Meta会限制广告主的广告能力!
  • 敏捷开发和传统开发的区别及工具分享
  • Flink 动态表 (Dynamic Table) 解读
  • CKS1.28【1】kube-bench 修复不安全项
  • JVM 性能调优 - 参数调优(3)