文章目录

  • 什么是ref
    • string类型
    • createRef创建
      • 写法一:
      • 写法二:

什么是ref

组件不是真实的DOM节点,在react开发中,官方也不建议直接去操作原生的DOM。组件的DOM节点是存在于内存中的一种数据结构,叫做虚拟DOM。如果需要从组件中获取真实的DOM节点,那就需要官方提供ref的属性。React提供了ref用于访问在render方法中创建的DOM元素或者是React的组件实例。
ref分为三种,我们这里先学两种。

string类型

看下面的小例子:点击按钮能够把输入框的值赋值给下面的p标签

import React, { Component } from 'react'export class App extends Component {render() {return (<div><input type='text' ref="haha" /><button onClick={this.getText}>点击</button><p ref="user">user</p></div>)}getText = () => {console.log(this.refs.haha.value)const user = this.refs.haha.valuethis.refs.user.innerHTML = user}
}export default App

这里我们就是通过ref来获取dom结点进行操作,input输入数据之后打印this.refs:
可以看到输入框的数据即为this.refs.haha.value

不过这种string类型的方法以及淘汰掉了,来看下一种

createRef创建

首先在页面最上面要进行导入,这里也导入一下PureComponent,因为下面例子会用到

import React, { createRef, PureComponent } from 'react'

写法一:

1.直接在constructor中定义this.headerRefs = createRef()
2.然后在需要使用的组件上绑定ref:


3.在按钮的点击时间中 通过current属性去获取DOM节点或者组件是实例,这里打印出来了
export class App extends PureComponent {constructor() {super()this.headerRefs = createRef()}render() {return (<div>App Page<Header ref={this.headerRefs}/><button onClick={this.getText}>点击获取</button></div>)}getText = () => {// 通过current属性去获取DOM节点或者组件是实例console.log(this.headerRefs.current.state.name)}
}class Header extends PureComponent {state = {name: 'hello react'}render() {return (<div>header Component</div>)}
}export default App

功能是实现了,但是在constructor中进行实现多少有点麻烦,下面介绍另一个写法:

写法二:

将input的内容展示给p标签
1.直接使用headerRefs = createRef()的格式去创建ref
2.在需要使用的组件上进行绑定< Header ref={this.headerRefs}/>
3.使用this.userRefs.current.innerHTML = this.inputRefs.current.value完成需求

export class App extends PureComponent {headerRefs = createRef()inputRefs = createRef()userRefs = createRef()render() {return (<div>App Page<Header ref={this.headerRefs}/><input type='text' ref={this.inputRefs} /><p ref={this.userRefs}>user</p><button onClick={this.getText}>点击获取</button></div>)}getText = () => {console.log(this.headerRefs.current.state.name)console.log(this.inputRefs)console.log(this.userRefs)this.userRefs.current.innerHTML = this.inputRefs.current.value}
}class Header extends PureComponent {state = {name: 'hello react'}render() {return (<div>header Component</div>)}
}export default App

查看效果:

react中ref使用方法解析相关推荐

  1. React中ref的使用方法

    React中ref的使用方法 在react典型的数据流中, props 传递是父子组件交互的唯一方式:通过传递一个新的 props 值来使子组件重新 re-render ,从而达到父子组件通信.当然, ...

  2. react中ref、createRef、React.forwardRef分别是什么?如何使用?

    一.react中ref.createRef.React.forwardRef (1)Ref 转发是一项将 ref 自动地通过组件传递到其一子组件的技巧.对于大多数应用中的组件来说,这通常不是必需的.但 ...

  3. [react] 在react中遍历的方法有哪些?它们有什么区别呢?

    [react] 在react中遍历的方法有哪些?它们有什么区别呢? 有React.Children.map和 React.Children.forEach这两个方法,他们的参数都是在组件中接受prop ...

  4. React中ref的使用方法和使用场景(详解)

    摘要 不管在Vue中还是React,如果我们想使用一个元素的DOM,不需要通过JS中操纵DOM的方法,它们提供了一个专属的API就是ref. 而Vue中的ref可能比较简单,这一篇主要讲一下如何在Re ...

  5. react中ref的使用

    在react中获取真实dom的时候就需要用到ref属性,具体使用如下 var MyComponent = React.createClass({handleClick: function() {con ...

  6. react中ref已废弃,请使用React.createRef()

    在项目开发过程中难免会从操作dom,在react中获取dom的方式 (1)ref(已废弃) //绑定ref <input ref="getInput"/> //获取do ...

  7. SqlHelper类中的ExecuteNonQuery方法解析

    在SqlHelper类(windows原)中,ExecuteNonQuery方法通常用于执行数据库更新与返回存储过程的输出参数,它有九个重载,接下来我们来一一解析. 首先介绍一下此方法可以输入哪些参数 ...

  8. React中ref的理解

    (1)React的ref有3种用法: 字符串 dom节点上使用,通过this.refs[refName]来引用真实的dom节点 <input ref="inputRef" / ...

  9. React 中ref 的使用(类组件和函数组件)以及forwardRef 与 useImperativeHandle 详解

    前言 在一个父组件中,我们想要获取到其中的节点元素或者子组件实例,从而直接调用其上面的方法.Class 类组件和函数组件是两种不同的写法. 1. Class 组件中使用ref 在 React 的 Cl ...

最新文章

  1. 查找Windows文件来历的好方法
  2. 李开复对谈张亚勤:科学家创业需要企业家伙伴,开放心态看待元宇宙 | MEET2022...
  3. linux下载tomcat7命令,linux下安装tomcat7.0
  4. nginx ngx_http_proxy_module(反向代理)
  5. Product user profile information 没有导入
  6. java集合框架的选用 若是数据量很大,0421测试题
  7. JavaScript之jQuery
  8. 基于java自行车租赁管理系统
  9. PES、PS、TS详解
  10. rgb sw 线主板接口在哪_华硕ROG STRIX LC 360 RGB一体式水冷:与ROG主板更配
  11. 阿里云大数据助理工程师认证考试考什么内容?
  12. 为什么有必要开发一个APP?
  13. FPGA学习02——Quartus01安装教程.
  14. 利用AUL工具恢复oracle dbf文件中的数据
  15. JavaWeb仓库管理系统,表弟的棒棒糖到底谁拿了
  16. 数字监控系统的工作原理图
  17. 【Telerik和Kendo UI组件】上海道宁与progress为您提供Web、移动和桌面构建功能更丰富的现代体验
  18. 【转】 SCM工具对比分析
  19. 扩展 EdgeX Foundry 混合开发环境
  20. 说说,博客,贴吧评论设计问题

热门文章

  1. 「CTS2019」氪金手游
  2. java网络编程---使用URL爬取歌曲
  3. 【Linux】虚拟机VMware的Ubuntu使用vi指令的方向键和backspace空格键乱码
  4. 雷靖,一个程序员的创业路
  5. caffe中各种loss函数
  6. 小程序canvas画头像
  7. 豆瓣电影数据可视化大屏
  8. win10关闭自带杀毒软件Windows Defender的两种方法
  9. 函数的引用透明性(referential transparency)
  10. WEB学习——JQury