UNPKG

ra-core

Version:

Core components of react-admin, a frontend Framework for building admin applications on top of REST services, using ES6, React

47 lines (42 loc) 1.58 kB
import { useRef, useEffect } from 'react'; /** * Debug hook showing which props updated between two renders * @example * * const MyComponent = React.memo(props => { * useWhyDidYouUpdate('MyComponent', props); * return <div...; * }); * * @link https://usehooks.com/useWhyDidYouUpdate/ */ export default function useWhyDidYouUpdate(name, props) { // Get a mutable ref object where we can store props ... // ... for comparison next time this hook runs. const previousProps = useRef() as any; useEffect(() => { if (previousProps.current) { // Get all keys from previous and current props const allKeys = Object.keys({ ...previousProps.current, ...props }); // Use this object to keep track of changed props const changesObj = {}; // Iterate through keys allKeys.forEach(key => { // If previous is different from current if (previousProps.current[key] !== props[key]) { // Add to changesObj changesObj[key] = { from: previousProps.current[key], to: props[key], }; } }); // If changesObj not empty then output to console if (Object.keys(changesObj).length) { console.log('[why-did-you-update]', name, changesObj); } } // Finally update previousProps with current props for next hook call previousProps.current = props; }); }