博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
初识React(4):ref属性
阅读量:6520 次
发布时间:2019-06-24

本文共 2003 字,大约阅读时间需要 6 分钟。

ref属性其实就是为了获取DOM节点,例如:

import React from 'react'class RefComponent extends React.Component {  componentDidMount(){     this.inputNode.focus();  }   render() {     return (       

ref属性

this.inputNode = node}/>
) }}export default RefComponent;

利用ref属性返回的回调函数获取DOM节点,从而让页面渲染完成之后,input聚焦,ref除了可以绑定回调函数之外还能绑定字符串,但是在后期react对字符串形式不再维护,这里就不具体说明了,就用回调函数获取DOM。

除了给input聚焦之外,还可以获取当前DOM节点的内容,如下:

import React from 'react'class RefComponent extends React.Component {  componentDidMount(){     this.inputNode.focus();     console.log(this.texthtml);     console.log(this.texthtml.innerHTML);  }   render() {     return (       

ref属性

this.inputNode = node}/>
this.texthtml = node}>你好
) }}export default RefComponent;

输出结果为:

你好
你好

在这里,我们也发现一个问题,ref虽然获取DOM节点很方便,但是如果ref用的多了,后期就不好维护了,所以,尽量能少用即少用。

ref除了可以给HTML标签添加,也可以给组件添加,例如:

import React from 'react'import Button from './button.js'class RefComponent extends React.Component {  componentDidMount(){     this.inputNode.focus();     console.log(this.texthtml);     console.log(this.texthtml.innerHTML);     console.log(this.buttonNode);  }   render() {     return (       

ref属性

this.inputNode = node}/>
this.texthtml = node}>你好
) }}export default RefComponent;

但是此时,this.buttonNode得到的是一个Button这个组件实例DOM

这里要注意一个问题,ref只能用在类定义的组件,不能用在函数组件,因为函数组件没有实例,比如以下写法就是错误的:

import React from 'react'function TestComponent() {   return (    
函数组件
);}class RefComponent extends React.Component { componentDidMount(){ console.log(this.testCom); } render() { return (

函数组件

this.testCom = node}/>
) }}export default RefComponent;

如果这样写,则会报错,并且this.testCom为undefined,因为此时是获取不到函数组件的实例的,所以以上写法要注意

总结: ref可以给HTML标签,类组件添加,但是不能给函数组件添加

转载地址:http://oarfo.baihongyu.com/

你可能感兴趣的文章
sina微博上看到的关于android界面设计相关的规范
查看>>
STL笔记(2) STL之父访谈录
查看>>
heartbeat测试
查看>>
STL——空间的配置和释放std::alloc(第一级配置器和第二级配置器)
查看>>
微软职位内部推荐-Senior Software Engineer II-Search
查看>>
PHP 的解压缩ZipArchive中的extractTo()方法 LINUX+nginx环境中解压zip时文件丢失的问题...
查看>>
ylbtech-LanguageSamples-ExplicitInterface(显示接口)
查看>>
RapeLay(电车之狼R)的结局介绍 (隐藏结局攻略)
查看>>
Google Mesa概览
查看>>
【Android开发】之Fragment生命周期
查看>>
[LeetCode] Clone Graph 无向图的复制
查看>>
我们搞开发的为什么会感觉到累(转)
查看>>
AfxMessageBox和MessageBox差别
查看>>
2015第7周六
查看>>
windows 应用商店应用笔记
查看>>
开涛spring3(6.4) - AOP 之 6.4 基于@AspectJ的AOP
查看>>
matplotlib显示中文
查看>>
AsyncTask 不能与Thread.sleep()同时使用解决方案
查看>>
Junit使用教程(一)
查看>>
生产环境下JAVA进程高CPU占用故障排查
查看>>