首页 > 其他分享 >React 中 ref 的使用

React 中 ref 的使用

时间:2022-11-09 14:02:35浏览次数:62  
标签:useRef const divRef React 使用 return ref

官方文档传送门

在类组件中使用 ref

1. React.createRef

class App extends React.Component {

    constructor(props) {
        super(props);
        this.divRef = React.createRef();
    }

    componentDidMount() {
        console.log(this.divRef.current);
    }

    render() {
        return <div ref={this.divRef}>验证 createRef 的一个div标签</div>
    }
}

2. 回调函数使用 ref

class App extends React.Component {

    constructor(props) {
        super(props);
        this.divRef = React.createRef();
    }

    componentDidMount() {
        console.log(this.divRef);
    }

    render() {
        return <div ref={ref => { this.divRef = ref }}>验证 createRef (回调方式) 的一个div标签</div>
    }
}

注意: 以上方法不能在函数组件中使用,因为函数组件没有实例。

在函数组件中使用 ref

1. React.useRef

const UseRefComponent = () => {
    const divRef = React.useRef();
	
    React.useEffect(() => {
        console.log(divRef.current);
    }, []);
	
    return <div ref={divRef}>验证 useRef 的一个 div 标签</div>
}

2. React.forwardRef

export const App = () => {
    const divRef = React.useRef();
	
    React.useEffect(() => {
        console.log(divRef.current);
    }, []);
	
    return <ForwardRefComponent ref={divRef} />
}

export const ForwardRefComponent = React.forwardRef((props, ref) => {
    return <div ref={ref}>验证 forwardRef 的一个 div 标签</div>
})

3. React.useImperativeHandle

export const App = () => {
    const divRef = React.useRef();
	
    React.useEffect(() => {
        console.log(divRef.current.clog());
    }, []);
	
    return <ForwardRefComponent ref={divRef} />
}

export const ForwardRefComponent = React.forwardRef((props, ref) => {
    const divRef = React.useRef();
	
    React.useImperativeHandle(ref, () => ({
        clog: () => {
            console.log(divRef.current);
        }
    }));

    return <div ref={divRef}>验证 useImperativeHandle 的一个 div 标签</div>
})

标签:useRef,const,divRef,React,使用,return,ref
From: https://www.cnblogs.com/operate/p/16873090.html

相关文章

  • vue 计算属性(computed)传参---使用内嵌方法的方式传参
    //计算容器是否配置权限showAuth(){//注意:全局变量必须在方法外面引用(变量改变之后重新触发计算事件),不然变量改变无法触发计算letauths=this.fieldAu......
  • C# TaskCompletionSource<T>使用
    什么时候使用?最典型的使用场景就是包装之前的异步方案(如Event),使方法可以通过async/await去调用。示例publicTask<Args>SomeApiWrapper(){TaskCompletionSource<......
  • OpenCV官方免费视频教程->快速入门OpenCV与AI使用 (视频 + 源码)
    课程介绍  OpenCV官方发布的免费OpenCV速成视频教程。本课程将帮助您迈出使用OpenCV学习计算机视觉和AI的第一步。您将学习并接触到各种令人兴奋的主题,例如图像和......
  • react进阶用法完全指南
    React调用回调函数,正确设置this指向的三种方法通过bindthis.increment=this.increment.bind(this);通过箭头函数<buttononClick={this.multi}>点我*10</button......
  • React组件通信
    react因为组件化,使得组件间通信十分的重要。本文就来简单介绍一些常见的react组件间传递的内容。我将归纳为以下几种关系来详述:父组件与子组件之间,子组件与父组件之间,发......
  • react组件深度解读
    五、React核心是组件在React中,我们使用组件(有状态、可组合、可重用)来描述UI。在任何编程语言中,你都可以将组件视为简单的函数。React组件也一样,它的输入是props......
  • 拓端tecdat|R语言辅导使用K-Means聚类可视化WiFi访问
    R语言使用K-Means聚类可视化WiFi访问 可视化已成为数据科学在电信行业中的关键应用。具体而言,电信分析高度依赖于地理空间数据的使用。这是因为电......
  • [Kyana]Linux逻辑卷的使用
    00|前排提示小白在使用Linux虚拟机时,常在开始分配较小的硬盘空间,在后续使用中常出现硬盘空间不足的问题,轻则无法安装软件,重则无法更新。本文推荐使用逻辑卷方式安装操作系......
  • react-Suspense工作原理分析
    Suspense基本应用Suspense目前在react中一般配合lazy使用,当有一些组件需要动态加载(例如各种插件)时可以利用lazy方法来完成。其中lazy接受类型为Promise<()=......
  • React高级特性之Context
    Context提供了一种不需要手动地通过props来层层传递的方式来传递数据。正文在典型的React应用中,数据是通过props,自上而下地传递给子组件的。但是对于被大量组件使用的......