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
A few days ago, the library said that the server ...
Writing a Dockerfile Configure yum source cd /tmp...
Recorded the installation and use tutorial of MyS...
The so-called connection limit in Nginx is actual...
Professional web design is complex and time-consu...
Introduction In orm frameworks, such as hibernate...
1: nginx server solution, modify the .conf config...
Here are some examples of how I use this property ...
Preface The master-slave replication relationship...
1.1 Data Type Overview The data type is a field c...
Recently, when using select query in a project, I...
Table of contents Short Introduction 1. Check the...
Table of contents 1. Installation and operation o...
Table of contents 1. Script vim environment 2. Ho...
[Who is nslookup?] 】 The nslookup command is a ve...