react中ref使用方法解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 组件不是真实的DOM节点,在react开发中,官方也不建议直接去操作原生的DOM。组件的DOM节点是存在于内存中的一种数据结构,叫做虚拟DOM。如果需要从组件中获取真实的DOM节点,那就需要官方提供ref的属性。==React提供了ref用于访问在render方法中创建的DOM元素或者是React的组件实例

什么是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.value
        this.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

查看效果:
在这里插入图片描述

相关文章
|
7天前
|
前端开发 JavaScript
React 步骤条组件 Stepper 深入解析与常见问题
步骤条组件是构建多步骤表单或流程时的有力工具,帮助用户了解进度并导航。本文介绍了在React中实现简单步骤条的方法,包括基本结构、状态管理、样式处理及常见问题解决策略,如状态管理库的使用、自定义Hook的提取和CSS Modules的应用,以确保组件的健壮性和可维护性。
44 17
|
2月前
|
前端开发 JavaScript
React Hooks 全面解析
【10月更文挑战第11天】React Hooks 是 React 16.8 引入的新特性,允许在函数组件中使用状态和其他 React 特性,简化了状态管理和生命周期管理。本文从基础概念入手,详细介绍了 `useState` 和 `useEffect` 的用法,探讨了常见问题和易错点,并提供了代码示例。通过学习本文,你将更好地理解和使用 Hooks,提升开发效率。
77 4
|
2月前
|
前端开发
深入解析React Hooks:构建高效且可维护的前端应用
本文将带你走进React Hooks的世界,探索这一革新特性如何改变我们构建React组件的方式。通过分析Hooks的核心概念、使用方法和最佳实践,文章旨在帮助你充分利用Hooks来提高开发效率,编写更简洁、更可维护的前端代码。我们将通过实际代码示例,深入了解useState、useEffect等常用Hooks的内部工作原理,并探讨如何自定义Hooks以复用逻辑。
|
2月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
221 2
|
13天前
|
前端开发 UED
React 文本区域组件 Textarea:深入解析与优化
本文介绍了 React 中 Textarea 组件的基础用法、常见问题及优化方法,包括状态绑定、初始值设置、样式自定义、性能优化和跨浏览器兼容性处理,并提供了代码案例。
39 8
|
24天前
|
前端开发 JavaScript
React Hooks 深入解析
React Hooks 深入解析
23 0
|
2月前
|
缓存 资源调度 JavaScript
npx与npm的差异解析,以及包管理器yarn与Node版本管理工具nvm的使用方法详解
npx与npm的差异解析,以及包管理器yarn与Node版本管理工具nvm的使用方法详解
60 0
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
70 2
|
2月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
76 0
|
2月前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
59 0

推荐镜像

更多