首页 > 其他分享 >01-React-组件-Ref

01-React-组件-Ref

时间:2023-09-23 12:34:38浏览次数:45  
标签:01 console render App React props btnClick 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;

image-20220504131435516

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

标签:01,console,render,App,React,props,btnClick,Ref
From: https://www.cnblogs.com/lzAurora/p/17724196.html

相关文章

  • 01-React-组件-CSS模块化
    CssModule(推荐)React的脚手架已经内置了cssmodules的配置:.css/.less/.scss等样式文件都修改成.module.css/.module.less/.module.scss等;在以前我们的文件是这样的index.css如果使用了CSS的模块化之后,在之前的文件的基础上在加上.module即可,如,index.module.cs......
  • 01-React-生命周期-执行时机
    生命周期概述事物从生到死的过程,我们称之为生命周期什么是生命周期方法事物在从生到死过程中,在特定时间节点调用的方法,我们称之为生命周期方法例如像我们人类,从生到死的过程有这么几个特定的时间点,就是上,幼儿园,小学,中学...React组件生命周期方法组件从生到死的......
  • 01-React-父子组件通讯-函数式组件
    在了解父子组件通讯这个知识点的时候,首先要说明清楚一点内容就是什么是父组件什么是子组件,在上一篇React-组件开篇当中我们在App.js类组件当中使用到了其它的一些组件,那么App就是父组件,被App所使用的就是子组件,了解了什么是父子组件之后,介绍要来介绍一下它们之间该如何进......
  • 01-React-父子组件通讯
    父子组件通讯父组件将方法传递给子组件,在React当中也会将父组件传递的,数据和函数信息直接存放在子组件当中,的Props属性对象当中React的父子组件通讯的实现其实就是利用,函数的互相调用进行实现完成的Header.js:importReactfrom'react';import'./Header.css';impo......
  • 01-React-组件-TransitionGroup
    TransitionGroup的作用,博主用通俗易懂的话来讲就是一个一组元素添加动画,在我们的实际开发当中有时可能会有这么一个需求就是,在一个页面上,有添加和删除,在做这些操作的时候需要都带上动画,那么这个时候就可以使用TransitionGroup来快速实现。案例App.js:importReactfrom'rea......
  • P6667 [清华集训2016] 如何优雅地求和 -Binomial Sum
    题面有一个多项式函数\(f(x)\),最高次幂为\(x^m\),定义变换\(Q\):\[Q(f,n,x)=\sum_{k=0}^{n}f(k)\binom{n}{k}x^k(1-x)^{n-k}\]现在给定函数\(f\)和\(n,x\),求\(Q(f,n,x)\bmod998244353\)。出于某种原因,函数\(f\)由点值形式给出,即给定\(a_0,a_1,⋯,a_m\)共\(m+1\)个......
  • Flutter/Dart第01天:Dart安装和初体验
    本博客原地址:https://ntopic.cn/p/2023092301/Dart的安装方式有几种:一种是下载源代码,然后编译安装;一种是通过包管理工具进行安装。Dart官方网站分表列出了针对Windows、Linux和MacOS的安装方式:https://dart.dev/get-dart我下面在个人MacOS上介绍brew包管理工具安装方法和过程:......
  • React面试
    1.什么是虚拟DOM?虚拟DOM是真实DOM在内存中的表示,ul的表示形式保存在内存中,并且与实际的DOM同步,这是一个发生在渲染函数被调用和元素在屏幕上显示的步骤,整个过程被称为调和2.类组件和函数组件之间的区别是什么?类组件可以使用其他特性,如状态和生命周期钩子,并且他有this函数组件只......
  • 自我介绍102101631
    自我介绍我叫陈康杰,学号是102101631我来自fzu我平常喜欢看一些历史文我最喜欢的歌手是周杰伦我最喜欢的歌曲是《一路向北》食堂里我最喜欢的是烤盘饭(虽然每次吃饱都花了很多的币)......
  • 用户故事与敏捷开发 读书笔记 01
    软件需求是一个沟通问题,一旦任何一方在沟通中把持绝对地位,项目就会遭受损失。我们需要一种协同工作的方式,让双方都不占绝对主导地位,共同面对感情用事和办公室政治化的资源分配问题。什么是用户故事?每个用户故事代表了一个独立的功能,即用户在一个单一环境中可能做的事情。用户故......