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
Table of contents 1. Foreign key constraints What...
Timer Effects: <div> <font id='timeC...
You can easily input Chinese and get Chinese outp...
Preface Using css to generate dotted lines is a p...
Table of contents String length: length charAt() ...
You must have inspiration to design a website. Goo...
If you have installed the Win10 system and want t...
1. flex-grow, flex-shrink, flex-basis properties ...
Seurat is a heavyweight R package for single-cell...
1. MySQL gets the current date and time function ...
The system environment is server2012 1. Download ...
Table of contents When developing, analyzing the ...
Use the following command to create a container a...
Table of contents Background 1. What is dns-prefe...
example: <html> <head> <style type...