Detailed explanation of cross-usage of Ref in React

Detailed explanation of cross-usage of Ref in React

1. First, let’s explain what Ref is

Ref forwarding is a technique that automatically passes a ref through a component to one of its children. This is usually not necessary for components in most applications. But it is useful for some components, especially reusable component libraries.

Ref official website description: click here

2. Usage of ref in hooks

1. Usage of ref in HTMLDom hooks

Just use it as usual on the official website. Here is an example:

const Fn = ()=>{
    const testRef = useRef(null);
    console.log('testRef',testRef.current); // Will render twice, the first time prints null, the second time is <div>test</div>
    return (
        <div ref={testRef}>test</div>
    )
}

2. Usage of ref in hooks and functional components

Here you just need to pass the ref attribute to the functional component

const Fn = ()=>{
    const testRef = useRef(null);
    // Define Test function component const Test = ({ refs }) => <div ref={refs}>I am ReactDOM test</div>;
    console.log('testRef',testRef.current); // Will render twice, the first time prints null, the second time is <div>I am ReactDOM test</div>
    return (
        {/* The reason why refs is used here instead of ref as prop is because ref will be specially processed by react and will not be passed through to react components as props, similar to key */}
         <Test refs={testRef} /> 
    )
}

3. Using ref with class components in hooks

Here you only need to manually assign the value to the useRef object in the callback ref of the class component. More callback refs: here

import ReactDom from 'react-dom';

const Fn = ()=>{
    const testClassRef = useRef(null);
    // Define the TestClass class component class TestClass extends React.Component {
        render() {
          return (
            <div >
                I am the TestClass component test</div>
          )
        }
    }
    console.log('testClassRef',testClassRef.current); // Will render twice, the first time prints null, the second time is <div>I am a TestClass component test</div>
    return (
        {/* The reason why refs is used here instead of ref as prop is because ref will be specially processed by react and will not be passed through to react components as props, similar to key */}
         <TestClass 
             ref={el => {
                console.log('new render refs')
                testClassRef.current = ReactDom.findDOMNode(el);
             }} 
         /> 
    )
}

4. Using ref with class and react-redux in hooks

When you encounter a class component wrapped by connect, because the outermost layer has been wrapped into a react-redux Provider, you need to pass the ref attribute through to the real React component. At this time, you need to pay attention to the forwardRef attribute of connect.

import ReactDom from 'react-dom';
import { connect } from 'react-redux';

const Fn = ()=>{
    const testClassRef = useRef(null);
    // Define the TestClass class component class TestClass extends React.Component {
        render() {
          return (
            <div >
                I am the TestClass component test</div>
          )
        }
    }
    //Define the component wrapped by connect of TestClass //forwardRef:true Set redux to allow ref to be passed as props to the component wrapped by connect const TestClassConnect = connect(null, null, null, { forwardRef: true })(TestClass);
    
    console.log('testClassRef',testClassRef.current); // Will render twice, the first time prints null, the second time is <div>I am a TestClass component test</div>
    return (
        {/* The reason why refs is used here instead of ref as prop is because ref will be specially processed by react and will not be passed through to react components as props, similar to key */}
         <TestClassConnect
            ref={el => {
              console.log('new render refs')
              testClassRef.current = ReactDom.findDOMNode(el);
            }}
          />
    )
}

The above is a detailed explanation of the cross-usage of Ref in React. For more information about the cross-usage of Ref in React, please pay attention to other related articles on 123WORDPRESS.COM!

You may also be interested in:
  • How to use React forwardRef and what to note
  • The complete usage of setup, ref, and reactive in Vue3 combination API
  • How to deeply understand React's ref attribute
  • Detailed explanation of the use of Refs in React's three major attributes
  • Specific use of useRef in React
  • React ref usage examples
  • Detailed explanation of how to use Ref in React
  • Detailed explanation of the use of react-refetch
  • Learn two demo examples of ref in React
  • Tutorial on using refs in React
  • Detailed explanation of the use of React component refs
  • RefreshContorl pull-down refresh usage in React Native

<<:  How to install and configure ftp server in CentOS8.0

>>:  Get the IP and host name of all hosts on Zabbix

Recommend

JavaScript commonly used array deduplication actual combat source code

Array deduplication is usually encountered during...

Detailed tutorial on installing mysql8.0.22 on Alibaba Cloud centos7

1. Download the MySQL installation package First ...

How MySQL supports billions of traffic

Table of contents 1 Master-slave read-write separ...

Use nexus as a private library to proxy docker to upload and download images

1. Nexus configuration 1. Create a docker proxy U...

Some thoughts and experience sharing on web page (website) design and production

First, before posting! Thanks again to I Want to S...

Pure CSS to achieve click to expand and read the full text function

Note When developing an article display list inte...

MySQL5.7 parallel replication principle and implementation

Anyone who has a little knowledge of data operati...

JavaScript to implement the countdown for sending SMS

This article shares the specific code of JavaScri...

How to add fields to a large data table in MySQL

Preface I believe everyone is familiar with addin...

Vue uses the video tag to implement video playback

This article shares the specific code of Vue usin...

How to solve "Unable to start mysql service error 1069"

Today, when I was on the road, a colleague sent m...

Detailed explanation of Axios asynchronous communication in Vue

1. First, we create a .json file for interactive ...

Sample code for making desktop applications with vue + Electron

1.vue packaging Here we use the vue native packag...