{"_path":"/frontend/react/detect-hook-deps-changes-with-usewhatschanged","_dir":"react","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Detect Hook Deps Changes With UseWhatsChanged","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"code","props":{"code":"import { useEffect, useRef } from 'react';\n\n/** Pass dictionary of `props` as argument and it will\n * tell you, which one changed after rerender.\n * Use `prefix` to distinguish props of different components.\n */\nexport const useWhatsChanged = (\n props: Record,\n prefix = '',\n) => {\n const prevProps = useRef(props);\n\n useEffect(() => {\n Object.entries(props).forEach(([key, value]) => {\n if (\n !Object.prototype.hasOwnProperty.call(prevProps.current, key) ||\n prevProps.current[key] !== value\n ) {\n console.log(`${prefix} ${key} has changed`);\n }\n });\n\n prevProps.current = props;\n }, [props, prefix]);\n};\n\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { useEffect, useRef } from 'react';\n\n/** Pass dictionary of `props` as argument and it will\n * tell you, which one changed after rerender.\n * Use `prefix` to distinguish props of different components.\n */\nexport const useWhatsChanged = (\n props: Record,\n prefix = '',\n) => {\n const prevProps = useRef(props);\n\n useEffect(() => {\n Object.entries(props).forEach(([key, value]) => {\n if (\n !Object.prototype.hasOwnProperty.call(prevProps.current, key) ||\n prevProps.current[key] !== value\n ) {\n console.log(`${prefix} ${key} has changed`);\n }\n });\n\n prevProps.current = props;\n }, [props, prefix]);\n};\n\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"code","props":{"code":"import { useEffect, useRef } from 'react';\n\n/** Pass dictionary of `props` as argument and it will\n * tell you, which one changed after rerender.\n * Use `prefix` to distinguish props of different components.\n */\nexport const useWhatsChanged = (\n props: Record,\n prefix = '',\n) => {\n const prevProps = useRef(props);\n\n useEffect(() => {\n Object.entries(props).forEach(([key, value]) => {\n if (\n !Object.prototype.hasOwnProperty.call(prevProps.current, key) ||\n prevProps.current[key] !== value\n ) {\n console.log(`${prefix} ${key} has changed`);\n }\n });\n\n prevProps.current = props;\n }, [props, prefix]);\n};\n\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b27501"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-e40149"},"children":[{"type":"text","value":"useEffect"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-e40149"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-b27501"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-851537"},"children":[{"type":"text","value":"'react'"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e9884"},"children":[{"type":"text","value":"/** Pass dictionary of `props` as argument and it will"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e9884"},"children":[{"type":"text","value":" * tell you, which one changed after rerender."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e9884"},"children":[{"type":"text","value":" * Use `prefix` to distinguish props of different components."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e9884"},"children":[{"type":"text","value":" */"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b27501"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b5989a"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3b4b35"},"children":[{"type":"text","value":"useWhatsChanged"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b27501"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d4c992"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ab123e"},"children":[{"type":"text","value":"props"}]},{"type":"element","tag":"span","props":{"class":"ct-0a753e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-d4c992"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b30c00"},"children":[{"type":"text","value":"Record"}]},{"type":"element","tag":"span","props":{"class":"ct-d4c992"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-989f48"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-d4c992"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-989f48"},"children":[{"type":"text","value":"unknown"}]},{"type":"element","tag":"span","props":{"class":"ct-d4c992"},"children":[{"type":"text","value":">,"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e40149"},"children":[{"type":"text","value":"prefix"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b27501"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-851537"},"children":[{"type":"text","value":"''"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-b5989a"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b5989a"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0c4f6c"},"children":[{"type":"text","value":"prevProps"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b27501"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3b4b35"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-e40149"},"children":[{"type":"text","value":"props"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3b4b35"},"children":[{"type":"text","value":"useEffect"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-b5989a"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d4c992"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-989f48"},"children":[{"type":"text","value":"Object"}]},{"type":"element","tag":"span","props":{"class":"ct-d4c992"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-641741"},"children":[{"type":"text","value":"entries"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b27501"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e40149"},"children":[{"type":"text","value":"prevProps"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-e40149"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":"["}]},{"type":"element","tag":"span","props":{"class":"ct-e40149"},"children":[{"type":"text","value":"key"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":"] "}]},{"type":"element","tag":"span","props":{"class":"ct-b27501"},"children":[{"type":"text","value":"!=="}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e40149"},"children":[{"type":"text","value":"value"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" ) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e40149"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-3b4b35"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-851537"},"children":[{"type":"text","value":"`${"}]},{"type":"element","tag":"span","props":{"class":"ct-e40149"},"children":[{"type":"text","value":"prefix"}]},{"type":"element","tag":"span","props":{"class":"ct-851537"},"children":[{"type":"text","value":"} ${"}]},{"type":"element","tag":"span","props":{"class":"ct-e40149"},"children":[{"type":"text","value":"key"}]},{"type":"element","tag":"span","props":{"class":"ct-851537"},"children":[{"type":"text","value":"} has changed`"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e40149"},"children":[{"type":"text","value":"prevProps"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-e40149"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b27501"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e40149"},"children":[{"type":"text","value":"props"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":" }, ["}]},{"type":"element","tag":"span","props":{"class":"ct-e40149"},"children":[{"type":"text","value":"props"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-e40149"},"children":[{"type":"text","value":"prefix"}]},{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":"]);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1d28d"},"children":[{"type":"text","value":"};"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-641741{color:#D2A8FF}.ct-0c4f6c{color:#79C0FF}.ct-989f48{color:#79C0FF}.ct-b30c00{color:#FFA657}.ct-0a753e{color:#FF7B72}.ct-ab123e{color:#FFA657}.ct-d4c992{color:#C9D1D9}.ct-3b4b35{color:#D2A8FF}.ct-b5989a{color:#FF7B72}.ct-1e9884{color:#8B949E}.ct-851537{color:#A5D6FF}.ct-e40149{color:#C9D1D9}.ct-b1d28d{color:#C9D1D9}.ct-b27501{color:#FF7B72}.light .ct-b27501{color:#859900}.light .ct-b1d28d{color:#657B83}.light .ct-e40149{color:#268BD2}.light .ct-851537{color:#2AA198}.light .ct-1e9884{color:#93A1A1}.light .ct-b5989a{color:#073642}.light .ct-3b4b35{color:#268BD2}.light .ct-d4c992{color:#657B83}.light .ct-ab123e{color:#657B83}.light .ct-0a753e{color:#859900}.light .ct-b30c00{color:#268BD2}.light .ct-989f48{color:#859900}.light .ct-0c4f6c{color:#268BD2}.light .ct-641741{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Frontend:React:Detect hook deps changes with useWhatsChanged.md","_source":"content","_file":"Frontend/React/Detect hook deps changes with useWhatsChanged.md","_extension":"md"}