search
HomeWeb Front-endJS TutorialTrack how many times a component rendered using useRef() - React

First let's think of all the ways how a beginner try to tackle this.

To follow along if you want to, create a new react project and put this much code in your App.jsx or any component of your choice and also remove everything from index.css and App.css:

import { useState } from "react";

function App() {
  const [count, setCount] = useState(0);

  const handleRender = () => {
    setCount(count + 1);
  };

  return (
    <div>
      <p>The component has rendered {0} times</p>

      <button onclick="{handleRender}">Force Render</button>
    </div>
  );
}

export default App;

It'll preview like this right now:
Track how many times a component rendered using useRef() - React
In the above code, I've create a state variable named count which increments by 1 on clicking the button. The count here is an extra state variable which doesn't doing anything here but it will help you understand things better. This code shouldn't overwhelm you if you've previously coded in React.

So, let's get to the main part...

1. Using State Variable

This is the first approach which come to most of us minds like create a state variable initializing it with 0 and increment it by 1 every time component renders.

Your App component will look like this:

function App() {
  const [count, setCount] = useState(0);
  const [numberOfTimesRendered, setNumberOfTimesRendered] = useState(0);

  const handleRender = () => {
    setCount(count + 1);
    setNumberOfTimesRendered(numberOfTimesRendered + 1);
  };

  return (
    <div>
      <p>The component has rendered {numberOfTimesRendered} times</p>

      <button onclick="{handleRender}">Force Render</button>
    </div>
  );
}

This approach will work fine here but it has many flaws. The component ideally isn't rendering only once when we click Force Render button. When we click the button the count value increments by 1 which causes the component to re-render as we all know change in any state variable causes a component to re-render. But it does end here after a re-render by setCount(count 1), setNumberOfTimesRendered(numberOfTimesRendered 1) will be triggered and causes the component to render again.

The numberOfTimesRendered value increments by 1 but every time we click the Force Render button the component is rendering twice which shows why using the state variable for this kind of matter is not the best but worst approach here.

2. Using Global Variable

Another approach one can think of is defining a global variable outside the component life-cycle and increment it by 1 when component re-renders, like this:

let numberOfTimesRendered = 0;

function App() {
  const [count, setCount] = useState(0);

  const handleRender = () => {
    setCount(count + 1);
  };

  numberOfTimesRendered += 1;

  return (
    <div>
      <p>The component has rendered {numberOfTimesRendered} times</p>

      <button onclick="{handleRender}">Force Render</button>
    </div>
  );
}

This approach will work fine and it doesn't cause any extra renders and this seems to be the best solution for this but it isn't as you shouldn't define anything outside the component life-cycle.

3. Using Local Variable

One can also think of the same approach as above but with local variable inside the component but let me tell you, there isn't any worst approach than this because every time the component render the local variable will re-initialize to 0 and we'll lost track of the previous renders every time.

4. Using useRef() hook

Now let's implement this using useRef().

As most of us know useRef is a hook to reference elements inside the dom and manipulate them manually but useRef is not just limited to this. It can also hold values and it can be used to keep a variable persistent across component rendering life-cycle.

If you store a value inside the useRef, it will not be affected by the React component rendering life-cycle, the value will remain persistent across any amount of re-renders. The implementation will look like this:

import { useState } from "react";

function App() {
  const [count, setCount] = useState(0);

  const handleRender = () => {
    setCount(count + 1);
  };

  return (
    <div>
      <p>The component has rendered {0} times</p>

      <button onclick="{handleRender}">Force Render</button>
    </div>
  );
}

export default App;

numberOfTimesRendered.current gives the current value stored inside the reference variable. This approach doesn't cause any extra re-renders not saying it is the best but one of the most optimal approach as of my knowledge.


That concludes this article. Open for feedbacks and if you need further clarification, please comment below, and I'll do my best to assist you.

Connect with me on X & LinkedIn!?✨

The above is the detailed content of Track how many times a component rendered using useRef() - React. For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Javascript Data Types : Is there any difference between Browser and NodeJs?Javascript Data Types : Is there any difference between Browser and NodeJs?May 14, 2025 am 12:15 AM

JavaScript core data types are consistent in browsers and Node.js, but are handled differently from the extra types. 1) The global object is window in the browser and global in Node.js. 2) Node.js' unique Buffer object, used to process binary data. 3) There are also differences in performance and time processing, and the code needs to be adjusted according to the environment.

JavaScript Comments: A Guide to Using // and /* */JavaScript Comments: A Guide to Using // and /* */May 13, 2025 pm 03:49 PM

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python vs. JavaScript: A Comparative Analysis for DevelopersPython vs. JavaScript: A Comparative Analysis for DevelopersMay 09, 2025 am 12:22 AM

The main difference between Python and JavaScript is the type system and application scenarios. 1. Python uses dynamic types, suitable for scientific computing and data analysis. 2. JavaScript adopts weak types and is widely used in front-end and full-stack development. The two have their own advantages in asynchronous programming and performance optimization, and should be decided according to project requirements when choosing.

Python vs. JavaScript: Choosing the Right Tool for the JobPython vs. JavaScript: Choosing the Right Tool for the JobMay 08, 2025 am 12:10 AM

Whether to choose Python or JavaScript depends on the project type: 1) Choose Python for data science and automation tasks; 2) Choose JavaScript for front-end and full-stack development. Python is favored for its powerful library in data processing and automation, while JavaScript is indispensable for its advantages in web interaction and full-stack development.

Python and JavaScript: Understanding the Strengths of EachPython and JavaScript: Understanding the Strengths of EachMay 06, 2025 am 12:15 AM

Python and JavaScript each have their own advantages, and the choice depends on project needs and personal preferences. 1. Python is easy to learn, with concise syntax, suitable for data science and back-end development, but has a slow execution speed. 2. JavaScript is everywhere in front-end development and has strong asynchronous programming capabilities. Node.js makes it suitable for full-stack development, but the syntax may be complex and error-prone.

JavaScript's Core: Is It Built on C or C  ?JavaScript's Core: Is It Built on C or C ?May 05, 2025 am 12:07 AM

JavaScriptisnotbuiltonCorC ;it'saninterpretedlanguagethatrunsonenginesoftenwritteninC .1)JavaScriptwasdesignedasalightweight,interpretedlanguageforwebbrowsers.2)EnginesevolvedfromsimpleinterpreterstoJITcompilers,typicallyinC ,improvingperformance.

JavaScript Applications: From Front-End to Back-EndJavaScript Applications: From Front-End to Back-EndMay 04, 2025 am 12:12 AM

JavaScript can be used for front-end and back-end development. The front-end enhances the user experience through DOM operations, and the back-end handles server tasks through Node.js. 1. Front-end example: Change the content of the web page text. 2. Backend example: Create a Node.js server.

Python vs. JavaScript: Which Language Should You Learn?Python vs. JavaScript: Which Language Should You Learn?May 03, 2025 am 12:10 AM

Choosing Python or JavaScript should be based on career development, learning curve and ecosystem: 1) Career development: Python is suitable for data science and back-end development, while JavaScript is suitable for front-end and full-stack development. 2) Learning curve: Python syntax is concise and suitable for beginners; JavaScript syntax is flexible. 3) Ecosystem: Python has rich scientific computing libraries, and JavaScript has a powerful front-end framework.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

SublimeText3 English version

SublimeText3 English version

Recommended: Win version, supports code prompts!

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.