Skip to content

Instantly share code, notes, and snippets.

@0xLDev
Created December 18, 2021 08:28
Show Gist options
  • Save 0xLDev/fd726af6a1487d0e1790daf9d0d03b46 to your computer and use it in GitHub Desktop.
Save 0xLDev/fd726af6a1487d0e1790daf9d0d03b46 to your computer and use it in GitHub Desktop.
import { useEffect, useRef } from 'react';
export const useWhatCausedRender = (name, props) => {
const prevPropsRef = useRef({});
useEffect(() => {
const changes = [];
const prevProps = prevPropsRef.current;
const keySet = new Set([...Object.keys(prevProps), ...Object.keys(props)]);
keySet.forEach((key) => {
if (prevProps[key] !== props[key]) {
changes.push({
key,
from: prevProps[key],
to: props[key],
});
}
});
console.log(`[${name}] rerendered because of:`);
changes.forEach((change) => {
const { key, from, to } = change;
console.log(` ${key}: ${from} => ${to}`);
});
prevPropsRef.current = props;
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment