react项目,传统类组件如何使用createRef()创建ref引用?
发布于 作者:苏南大叔 来源:程序如此灵动~

ref
引用是react
中出现的一个新的概念,这个概念可以用于链接react
世界和传统页面写法的世界。可以说ref
可以用于沟通react
逻辑和传统页面逻辑的神奇魔法大门。在类式组件和函数式组件中,都存在着ref
的概念,但是使用方式是有所不同的。本文则主要介绍在类式组件中,使用ref
的方式。

大家好,这里是苏南大叔的程序如此灵动博客,这里记录苏南大叔和计算机代码的故事。本文通过一个类式组件的例子,说明如何使用createRef()
来创建一个ref
引用,并且读取相关数据。测试环境:create-react-app@5.0.1
,react@18.2.0
,react-dom@18.2.0
,node@16.14.2
。
创建和引用
创建一个ref
,使用的是createRef()
方法,它是定义在React
对象上的,不用单独引用。一般来说,这个ref
是会附加在某个html
对象上的。但是,也可以附加在某个js
对象上。目前本文描述的是头一种最常见的情况,附在某个html
对象(input
)上。
关键代码:

调用ref.current
在react
中,所有的ref
都有个current
值,这个表示的是真正的引用对象。比如在上个例子中,这个真正的引用对象就是input
(传统意义上html
里面的input
对象,而不是react
包装过的input
)。
读取ref.current
属性
经常使用ref.current.value
来获得input
的value
值。
因为ref
的默认值是null
,所以如果直接调用.current.value
的话,可能会报错。另外,因为.current
代表的对象是什么都有可能,所以,也不一定能获得.value
属性。

调用ref.current
属性
因为在本文中,ref
是个输入框,传统的页面逻辑里面,输入框有很多方法可以调用,其中一个就是聚焦(focus()
)。

测试代码
如下代码是在传统类组件中,定义和使用ref
的简单例子。
在输入框里面修改文字的时候,会有console.log
输出其文字,点击按钮可以主动要求输入框实现聚焦功能(这个和react
的思路是完全背驰的)。

特殊说明
在更早期的react
代码里面,创建ref
是不需要createRef()
的,可以直接写个字符串也是可以的。比如:
调用的时候,使用this.refs[]
数组来使用。
但是,这种写法已经被弃用了。如果使用的话,可能会收到一些错误提示信息。例如:
react
官方有对使用字符串的警告的说明文章:

react
官方有对refs
的写法弃用的说明文章:
相关链接
- https://newsn.net/say/react-state.html
- https://newsn.net/say/react-memo.html
- https://newsn.net/say/react-bind.html
- https://newsn.net/say/react-pure-component.html
- https://newsn.net/say/create-react-app.html
结束语
在react
里面ref
的创建,分为两个分支,类式组件和函数式组件里面,方式是完全不同的。在使用的时候,都是通过.current
来获得引用对象的,但是引用对象是个dom
,还是个js
变量,这个还有待考证。
更多react
经验文章,请点击苏南大叔的经验文章:


