What are Refs Refs provide a way to allow us to access DOM nodes or React elements created in the render method. Refs Ref forwarding is an optional feature that allows certain components to receive a ref and pass it down (in other words, "forward" it) to child components. By default, you cannot use the ref attribute on function components because they don't have instances: 1. String RefsIt is not recommended to use this method because of some issues with string refs. It is deprecated and may be removed in a future version. import React from "react"; // Parent component export default class StringRef extends React.PureComponent { componentDidMount() { console.log("stringRefDom:", this.refs.stringRefDom); console.log("stringRefComp:", this.refs.stringRefComp); } render() { return ( <div> {/*How to use native components*/} <div ref={"stringRefDom"}>stringRefDom</div> {/*How to use the class component*/} <StringRefComp ref={"stringRefComp"} /> </div> ); } } //Class component class StringRefComp extends React.PureComponent { render() { return <div>StringRefComp</div>; } } 2. Callback Refs
import React from "react"; // Parent component export default class CallbackRef extends React.PureComponent { constructor(props) { super(props); this.callbackRefDom = null; this.callbackRefComp = null; } componentDidMount() { console.log("callbackRefDom:", this.callbackRefDom); console.log("callbackRefComp:", this.callbackRefComp); } //Callback function setCallbackRefDom = (ref) => { this.callbackRefDom = ref; }; setCallbackRefComp = (ref) => { this.callbackRefComp = ref; }; //Callback function render() { return ( <div> <div ref={this.setCallbackRefDom}>callbackRefDom</div> <CallbackRefComp ref={this.setCallbackRefComp} /> </div> ); } } //Class component class CallbackRefComp extends React.PureComponent { render() { return <div>callbackRefComp</div>; } } React.createRef()
import React from "react"; // Parent component export default class CreateRef extends React.PureComponent { constructor(props) { super(props); this.createRefDom = React.createRef(); this.createRefComp = React.createRef(); } componentDidMount() { console.log("createRefDom:", this.createRefDom.current); console.log("createRefComp:", this.createRefComp.current); } render() { return ( <div> <div ref={this.createRefDom}>createRefDom</div> <CreateRefComp ref={this.createRefComp} /> </div> ); } } //Class component class CreateRefComp extends React.PureComponent { render() { return <div>CreateRefComp</div>; } } 4. useRef
import React, { useEffect } from "react"; // Parent component const UseRef = React.memo(() => { // // You can also use // const createRefDom = React.createRef(); // const createRefComp = React.createRef(); const createRefDom = React.useRef(); const createRefComp = React.useRef(); useEffect(() => { console.log("useRefDom:", createRefDom.current); console.log("useRefComp:", createRefComp.current); }, []); return ( <div> <div ref={createRefDom}>useRefDom</div> <UseRefComp ref={createRefComp} /> </div> ); }); export default UseRef; //Class component class UseRefComp extends React.PureComponent { render() { return <div>useRefComp</div>; } } 5. Refs and Function Components
import React, { useEffect, useImperativeHandle } from "react"; // Parent component const ForwardRef = React.memo(() => { const createRefComp = React.useRef(); const createRefCompMethod = React.useRef(); useEffect(() => { console.log("useRefComp:", createRefComp.current); console.log("createRefCompMethod:", createRefCompMethod.current); createRefComp.current.reload(); }, []); return ( <div> <ForwardRefFunc ref={createRefComp} /> </div> ); }); export default ForwardRef; const RefFunc = React.forwardRef((props, ref) => { const [name, setName] = React.useState(null); const reload = () => { console.log("reload"); setTimeout(() => { setName("ForwardRefFunc"); }, 3000); }; //useImperativeHandle allows you to customize the instance value exposed to the parent component when using refuseImperativeHandle(ref, () => { return { reload: reload, }; }); return <div ref={ref}>ForwardRefFunc {name}</div>; }); const ForwardRefFunc = React.memo(RefFunc); The ultimate goal of forwardRef and useImperativeHandle is to try to provide a callable object to ref!
SummarizeThis concludes this article about some common uses of refs in React. For more information about the use of refs in React, please search 123WORDPRESS.COM’s previous articles or continue to browse the following related articles. I hope everyone will support 123WORDPRESS.COM in the future! You may also be interested in:
|
<<: How to expand the disk size of a virtual machine
>>: MySQL 8.0 DDL atomicity feature and implementation principle
There is a requirement for a list containing mult...
After many difficult single-step debugging late a...
This article shares the specific code of js to im...
When using Animation.css, I found that the font o...
Get a deep understanding of how the Linux configu...
For individual webmasters, how to make their websi...
Table of contents 1. What is JSON 1.1 Array liter...
This article example shares the specific code for...
Table of contents 1. Use object to create an obje...
Preface Seeing the title, everyone should be thin...
Introduction 1.<iframe> tag: iframe is an i...
After the form is submitted, the returned HTML pag...
Table of contents 1. Usage 2. Output results 1.id...
According to null-values, the value of null in My...
Vim is a powerful full-screen text editor and the...