认识ref及其使用场景

本文是参考自-《React进阶之路》

  1. 简介

Ref是react提供的是一种特殊属性,可以获取任意DOM元素甚至可以获取组件的实例,灵活使用ref可以给我们带来便利,例如控制元素的焦点或者文本的选择等,ref会设置一个回调函数,这个回调函数会在组件挂载的时候接收DOM元素或者实例作为参数,这样我们就可以去操作它们了,下面我们具体介绍它的使用场景。

  1. 使用场景
  1. 在DOM元素上使用ref

这个场景是最常使用的,如下代码所示,为input元素定义一个ref,因为ref获取的是组件的真实DOM而不是虚拟DOM,所以在组件被挂载以后,ref才会通过设置的myInput获取到了input元素节点,然后去执行回调函数,实现这里挂载完成后在componentDidMount中自动获取input焦点的功能;

  

在某些时候我们可能会遇到,ref值设置的是一个字符串,而并非回调函数,如下:

                     <input ref=’myInput’/>

       我们可以通过this.refs.myInput拿到这个DOM节点,然后去执行这个元素的方法,this.refs.myInput.focus(),这种方式尽量不要去使用。

 

  1. 在组件上使用ref

有些时候我们需要在父组件中使用子组件的方法,例如:在1)中例子的基础上,在外层定义一个父组件,在父组件中执行它失去焦点的动作,我们这样去做,在父组件中引用子组件,并且像获取input元素时一样给它设置一个ref的回调函数,再在父组件中写一个按钮,当点击的时候让input失去焦点,如下代码所示

    • 首先在子组件中定义一个失去焦点的方法

    • 其次引入子组件并给组件定义ref,然后写一个button,在点击事件中获取声明的子组件实例并执行子组件中的方法

 

注:ref获取子组件实例只能用于子组件是class组件,函数组件是没有用的,但是不影响在函数组件内部获取DOM元素或者组件实例

 

  1. 在父组件中拿到子组件的DOM元素

这个是一种特殊的情景,在2)中我们只能拿到子组件的实例,并不能获取组件中的DOM元素,下面介绍这种间接获取的方式。

在调用子组件的时候自定义给子组件一个属性例如propsRef,将定义的获取DOM元素的回调函数,传入子组件,将这个回调函数赋值给子组件的DOM元素的ref属性,这样就间接的实现了获取子组件的DOM元素。

                           

                    

注:子组件无论是class还是函数组件都可以使用

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值