react中ref使用方法解析

简介: 组件不是真实的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

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

相关文章
|
4月前
|
前端开发 JavaScript 算法
深入理解前端框架:解析 React 的虚拟 DOM
虚拟 DOM 是 React 前端框架的核心概念之一。本文将深入探讨虚拟 DOM 的原理和应用,帮助读者更好地理解 React 框架的工作机制,并学习如何高效地使用虚拟 DOM 进行前端开发。
37 1
|
13天前
|
前端开发 JavaScript
ES6:Promise使用方法解析大全
ES6:Promise使用方法解析大全
|
1月前
|
前端开发 JavaScript
深入了解 React 中的 Ref:不是魔法,是超级工具
深入了解 React 中的 Ref:不是魔法,是超级工具
|
1月前
|
自然语言处理 前端开发
深入解析 React-i18next:在 React 中实现国际化(二)
深入解析 React-i18next:在 React 中实现国际化(二)
|
1月前
|
自然语言处理 资源调度 前端开发
深入解析 React-i18next:在 React 中实现国际化(一)
深入解析 React-i18next:在 React 中实现国际化(一)
|
2月前
|
安全 Java 数据安全/隐私保护
【Spring底层原理高级进阶】【SpringCloud整合Spring Security OAuth2】深入了解 Spring Security OAuth2:底层解析+使用方法+实战
【Spring底层原理高级进阶】【SpringCloud整合Spring Security OAuth2】深入了解 Spring Security OAuth2:底层解析+使用方法+实战
|
4月前
|
前端开发
React旧有生命周期和新生命周期的解析
React旧有生命周期和新生命周期的解析
30 0
React旧有生命周期和新生命周期的解析
|
4月前
|
JavaScript 前端开发 Java
React 中的 ref 和 refs:解锁更多可能性(下)
React 中的 ref 和 refs:解锁更多可能性(下)
React 中的 ref 和 refs:解锁更多可能性(下)
|
19天前
|
前端开发 测试技术 开发工具
探索前端框架React Hooks的优势与应用
本文将深入探讨前端框架React Hooks的优势与应用。通过分析React Hooks的特性以及实际应用案例,帮助读者更好地理解和运用这一现代化的前端开发工具。
|
12天前
|
开发框架 Dart 前端开发
【Flutter前端技术开发专栏】Flutter与React Native的对比与选择
【4月更文挑战第30天】对比 Flutter(Dart,强类型,Google支持,快速热重载,高性能渲染)与 React Native(JavaScript,庞大生态,热重载,依赖原生渲染),文章讨论了开发语言、生态系统、性能、开发体验、学习曲线、社区支持及项目选择因素。两者各有优势,选择取决于项目需求、团队技能和长期维护考虑。参考文献包括官方文档和性能比较文章。
【Flutter前端技术开发专栏】Flutter与React Native的对比与选择

推荐镜像

更多