1/*
2 A common use case is to access a child imperatively:
3*/
4
5function TextInputWithFocusButton() {
6 const inputEl = useRef(null);
7 const onButtonClick = () => {
8 // `current` points to the mounted text input element
9 inputEl.current.focus();
10 };
11 return (
12 <>
13 <input ref={inputEl} type="text" />
14 <button onClick={onButtonClick}>Focus the input</button>
15 </>
16 );
17}
1import React, {useRef, useEffect} from "react";
2
3export default function (props) {
4 // Initialized a hook to hold the reference to the title div.
5 const titleRef = useRef();
6
7 useEffect(function () {
8 setTimeout(() => {
9 titleRef.current.textContent = "Updated Text"
10 }, 2000); // Update the content of the element after 2seconds
11 }, []);
12
13 return <div className="container">
14 {/** The reference to the element happens here **/ }
15 <div className="title" ref={titleRef}>Original title</div>
16 </div>
17}
1const initialState = {count: 0};
2
3function reducer(state, action) {
4 switch (action.type) {
5 case 'increment':
6 return {count: state.count + 1};
7 case 'decrement':
8 return {count: state.count - 1};
9 default:
10 throw new Error();
11 }
12}
13
14function Counter() {
15 const [state, dispatch] = useReducer(reducer, initialState);
16 return (
17 <>
18 Count: {state.count}
19 <button onClick={() => dispatch({type: 'decrement'})}>-</button>
20 <button onClick={() => dispatch({type: 'increment'})}>+</button>
21 </>
22 );
23}
1import React, { useRef } from 'react';
2
3function TextInputWithFocusButton() {
4 const inputEl = useRef(null);
5 const onButtonClick = () => {
6 // `current` points to the mounted text input element
7 inputEl.current.focus();
8 };
9 return (
10 <>
11 <input ref={inputEl} type="text" />
12 <button onClick={onButtonClick}>Focus the input</button>
13 </>
14 );
15}
1import React, { useState, useEffect, useRef } from "react";
2import ReactDOM from "react-dom";
3
4import "./styles.css";
5
6function CountMyRenders() {
7 const countRenderRef = useRef(1);
8
9 useEffect(function afterRender() {
10 countRenderRef.current++;
11 });
12
13 return <div>I've rendered {countRenderRef.current} times</div>;
14}
15
16function App() {
17 const [count, setCount] = useState(0);
18 return (
19 <div className="App">
20 <CountMyRenders />
21 <button onClick={() => setCount(count => count + 1)}>
22 Click to re-render
23 </button>
24 </div>
25 );
26}
27
28const rootElement = document.getElementById("root");
29ReactDOM.render(<App />, rootElement);
1import { useRef } from 'react';
2
3function LogButtonClicks() {
4 const countRef = useRef(0);
5 const handle = () => {
6 countRef.current++; console.log(`Clicked ${countRef.current} times`);
7 };
8
9 console.log('I rendered!');
10
11 return <button onClick={handle}>Click me</button>;
12}