react-render-kit
← All tools

why-renderstable

Debug why React components re-render by diffing props between renders. Logs primitive changes, object reference churn, and added/removed props.

Install: pnpm add @sapanmozammel/why-render

⚠ unnecessary re-render

Parent passes user={{ id: 1, role: "admin" }} as a literal. React creates a new object reference every render — same data, new identity.

<UserCard>render #1
name"Alice"
age25
user{id:1, role:"admin"}
onSave[Function: anonymous]
useWhyRender output
Trigger an action above.No output = hook stayed silent.
See the code
❌ The bug:
// ❌ New object created on every parent render
const Parent = () => (
  <UserCard
    user={{ id: 1, role: 'admin' }}
    onSave={stableCallback}
  />
);
✅ The fix:
// ✅ Stable reference — same object across renders
const Parent = () => {
  const user = useMemo(
    () => ({ id: 1, role: 'admin' }),
    [],
  );
  return <UserCard user={user} onSave={stableCallback} />;
};
How to add this to your component
import { useWhyRender } from '@sapanmozammel/why-render';

const UserCard = (props: UserCardProps) => {
  useWhyRender('UserCard', props);
  // rest of your component...
};

No-op in production. Open DevTools console to see output alongside this panel.