React-组件-Ref

简介: React-组件-Ref

React 中获取元素的方式


  • 字符串
  • 对象
  • 回调函数

官方文档:https://zh-hans.reactjs.org/docs/refs-and-the-dom.html#gatsby-focus-wrapper




第一种


  • 传统方式(在 React 中及其不推荐)
import React from "react";
class App extends React.PureComponent {
    constructor(props) {
        super(props);
    }
    render() {
        console.log('App-render-被调用');
        return (
            <div>
                <p id={'box'}>我是段落</p>
                <button onClick={() => {
                    this.btnClick()
                }}>APP按钮
                </button>
            </div>
        )
    }
    btnClick() {
        let oP = document.getElementById('box');
        oP.innerHTML = 'www.it6666.top';
        console.log(oP);
    }
}
export default App;




第二种


  • 通过 ref='字符串' / this.refs.字符串 (通过字符串的方式即将被废弃, 也不推荐)
import React from "react";
class App extends React.PureComponent {
    constructor(props) {
        super(props);
    }
    render() {
        console.log('App-render-被调用');
        return (
            <div>
                <p ref={'box'}>我是段落</p>
                <button onClick={() => {
                    this.btnClick()
                }}>APP按钮
                </button>
            </div>
        )
    }
    btnClick() {
        let oP = this.refs.box;
        oP.innerHTML = 'www.it6666.top';
        console.log(oP);
    }
}
export default App;




第三种


  • 通过 createRef() 创建一个对象, 然后将这个对象传递给 ref (推荐)
import React from "react";
class App extends React.PureComponent {
    constructor(props) {
        super(props);
        this.oPRef = React.createRef();
    }
    render() {
        console.log('App-render-被调用');
        return (
            <div>
                <p ref={this.oPRef}>我是段落</p>
                <button onClick={() => {
                    this.btnClick()
                }}>APP按钮
                </button>
            </div>
        )
    }
    btnClick() {
        let oP = this.oPRef.current;
        oP.innerHTML = 'www.it6666.top';
        console.log(oP);
    }
}
export default App;




第四种


  • 通过传递一个回调函数, 然后保存回调函数参数的方式(推荐)
import React from "react";
class App extends React.PureComponent {
    constructor(props) {
        super(props);
        this.oPRef = null;
    }
    render() {
        console.log('App-render-被调用');
        return (
            <div>
                <p ref={(args) => {
                    this.oPRef = args
                }}>我是段落</p>
                <button onClick={() => {
                    this.btnClick()
                }}>APP按钮
                </button>
            </div>
        )
    }
    btnClick() {
        this.oPRef.innerHTML = 'www.it6666.top';
        console.log(this.oPRef);
    }
}
export default App;




React 中 Ref 注意点


  • 获取原生元素, 拿到的是元素本身
import React from "react";
class App extends React.PureComponent {
    constructor(props) {
        super(props);
        this.myRef = React.createRef();
    }
    render() {
        return (
            <div>
                <p ref={this.myRef}>我是段落</p>
                <button onClick={() => {
                    this.btnClick()
                }}>APP按钮
                </button>
            </div>
        )
    }
    btnClick() {
        console.log(this.myRef.current);
    }
}
export default App;


  • 获取类组件元素, 拿到的是组件的实例对象
import React from "react";
class Home extends React.PureComponent {
    render() {
        return (
            <div>Home</div>
        )
    }
}
class App extends React.PureComponent {
    constructor(props) {
        super(props);
        this.myRef = React.createRef();
    }
    render() {
        return (
            <div>
                <Home ref={this.myRef}/>
                <button onClick={() => {
                    this.btnClick()
                }}>APP按钮
                </button>
            </div>
        )
    }
    btnClick() {
        console.log(this.myRef.current);
    }
}
export default App;
  • 获取函数组件元素, 拿不到任何内容
import React from "react";
function About() {
    return (
        <div>About</div>
    )
}
class App extends React.PureComponent {
    constructor(props) {
        super(props);
        this.myRef = React.createRef();
    }
    render() {
        return (
            <div>
                <About ref={this.myRef}/>
                <button onClick={() => {
                    this.btnClick()
                }}>APP按钮
                </button>
            </div>
        )
    }
    btnClick() {
        console.log(this.myRef.current);
    }
}
export default App;

官方文档:https://zh-hans.reactjs.org/docs/refs-and-the-dom.html#gatsby-focus-wrapperundefined(https://foruda.gitee.com/images/1694531976417249641/dc6f8fed_5151444.png)




最后

本期结束咱们下次再见👋~

🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗

相关文章
|
2月前
|
前端开发 JavaScript
学习react基础(3)_setState、state、jsx、使用ref的几种形式
本文探讨了React中this.setState和this.state的区别,以及React的核心概念,包括核心库的使用、JSX语法、类与函数组件的区别、事件处理和ref的使用。
63 3
学习react基础(3)_setState、state、jsx、使用ref的几种形式
|
2月前
|
JavaScript 前端开发 开发者
React 的正确使用方法:ref 篇
你真的用对了 useRef 吗?在与 TypeScript 一起使用、以及撰写组件库的情况下,你的写法能够避开以下所有场景的坑吗?
|
2月前
|
前端开发
react学习(17)回调形式的ref
react学习(17)回调形式的ref
|
2月前
|
存储 前端开发 容器
react学习(18)createRef形式的ref
react学习(18)createRef形式的ref
|
3月前
|
前端开发 知识图谱
[译] React 中的 "最新 Ref 模式"
[译] React 中的 "最新 Ref 模式"
|
4月前
|
JavaScript
react18【系列实用教程】useRef —— 创建 ref 对象,获取 DOM (2024最新版)
react18【系列实用教程】useRef —— 创建 ref 对象,获取 DOM (2024最新版)
55 0
|
6月前
|
前端开发 JavaScript
深入了解 React 中的 Ref:不是魔法,是超级工具
深入了解 React 中的 Ref:不是魔法,是超级工具
187 0
|
6月前
|
存储 前端开发 中间件
React组件间的通信
React组件间的通信
50 1
|
6月前
|
前端开发 应用服务中间件 数据库
react服务端组件
react服务端组件
50 0
|
6月前
|
前端开发 JavaScript
快速上手React:从概述到组件与事件处理
快速上手React:从概述到组件与事件处理