Rooks

useRenderCount

About

A simple debugging hook that tracks how many times a component has rendered. Useful for identifying unnecessary re-renders and optimizing component performance.

Examples

Basic example

import { useRenderCount } from "rooks";
 
export default function App() {
  const renderCount = useRenderCount();
 
  return (
    <div>
      <h1>Component Render Count</h1>
      <p>This component has rendered {renderCount} times</p>
    </div>
  );
}

Debugging unnecessary re-renders

import { useState } from "react";
import { useRenderCount } from "rooks";
 
export default function App() {
  const [count, setCount] = useState(0);
  const [name, setName] = useState("");
  const renderCount = useRenderCount();
 
  return (
    <div>
      <h1>Debugging Re-renders</h1>
      <p>Render count: {renderCount}</p>
      
      <div>
        <label>Counter: {count}</label>
        <button onClick={() => setCount(c => c + 1)}>Increment</button>
      </div>
      
      <div>
        <label>Name:</label>
        <input 
          value={name} 
          onChange={(e) => setName(e.target.value)}
          placeholder="Type your name"
        />
      </div>
      
      {renderCount > 10 && (
        <div style={{color: 'red'}}>
          Warning: This component has re-rendered {renderCount} times!
        </div>
      )}
    </div>
  );
}

Conditional behavior based on render count

import { useState, useEffect } from "react";
import { useRenderCount } from "rooks";
 
export default function App() {
  const [data, setData] = useState(null);
  const renderCount = useRenderCount();
 
  // Only show loading indicator after first render
  const showLoading = renderCount === 1 && !data;
 
  useEffect(() => {
    // Simulate data loading
    const timer = setTimeout(() => {
      setData("Data loaded successfully!");
    }, 2000);
 
    return () => clearTimeout(timer);
  }, []);
 
  return (
    <div>
      <h1>Conditional Rendering Example</h1>
      <p>Render #{renderCount}</p>
      
      {showLoading && <p>Loading...</p>}
      {data && <p>{data}</p>}
      
      <button onClick={() => setData(null)}>Reset Data</button>
    </div>
  );
}

Arguments

This hook does not accept any arguments.

Returns

Return valueTypeDescription
renderCountNumberThe number of times the component has rendered (starts from 1)

Use Cases

  • Performance Debugging: Identify components that re-render too frequently
  • Development Tools: Build custom debugging components that show render information
  • Conditional Logic: Execute code only after a certain number of renders
  • Testing: Verify that optimizations are working correctly
  • Component Analysis: Understand how state changes affect component rendering

Notes

  • The render count starts from 1 (not 0) on the first render
  • Each call to the hook maintains its own independent render count
  • The count persists for the lifetime of the component
  • This hook is primarily intended for development and debugging purposes

On this page