mirror of
https://github.com/muerwre/muerwre.github.io.git
synced 2025-04-25 02:46:39 +07:00
1 line
No EOL
17 KiB
JSON
1 line
No EOL
17 KiB
JSON
{"_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<string, unknown>,\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<string, unknown>,\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<string, unknown>,\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-50be53"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-c2aa86"},"children":[{"type":"text","value":"useEffect"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-c2aa86"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-50be53"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2256ee"},"children":[{"type":"text","value":"'react'"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"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-71d755"},"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-71d755"},"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-71d755"},"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-71d755"},"children":[{"type":"text","value":" */"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-50be53"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-10d630"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-64a834"},"children":[{"type":"text","value":"useWhatsChanged"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-50be53"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c40951"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-072d13"},"children":[{"type":"text","value":"props"}]},{"type":"element","tag":"span","props":{"class":"ct-6b4fe7"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-c40951"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d81651"},"children":[{"type":"text","value":"Record"}]},{"type":"element","tag":"span","props":{"class":"ct-c40951"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-f51b9a"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-c40951"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-f51b9a"},"children":[{"type":"text","value":"unknown"}]},{"type":"element","tag":"span","props":{"class":"ct-c40951"},"children":[{"type":"text","value":">,"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c2aa86"},"children":[{"type":"text","value":"prefix"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-50be53"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2256ee"},"children":[{"type":"text","value":"''"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-10d630"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-10d630"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ebf9df"},"children":[{"type":"text","value":"prevProps"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-50be53"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-64a834"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-c2aa86"},"children":[{"type":"text","value":"props"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"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-957903"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-64a834"},"children":[{"type":"text","value":"useEffect"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-10d630"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c40951"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f51b9a"},"children":[{"type":"text","value":"Object"}]},{"type":"element","tag":"span","props":{"class":"ct-c40951"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-6ba254"},"children":[{"type":"text","value":"entries"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-50be53"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c2aa86"},"children":[{"type":"text","value":"prevProps"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c2aa86"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":"["}]},{"type":"element","tag":"span","props":{"class":"ct-c2aa86"},"children":[{"type":"text","value":"key"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":"] "}]},{"type":"element","tag":"span","props":{"class":"ct-50be53"},"children":[{"type":"text","value":"!=="}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c2aa86"},"children":[{"type":"text","value":"value"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" ) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c2aa86"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-64a834"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2256ee"},"children":[{"type":"text","value":"`${"}]},{"type":"element","tag":"span","props":{"class":"ct-c2aa86"},"children":[{"type":"text","value":"prefix"}]},{"type":"element","tag":"span","props":{"class":"ct-2256ee"},"children":[{"type":"text","value":"} ${"}]},{"type":"element","tag":"span","props":{"class":"ct-c2aa86"},"children":[{"type":"text","value":"key"}]},{"type":"element","tag":"span","props":{"class":"ct-2256ee"},"children":[{"type":"text","value":"} has changed`"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-957903"},"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-957903"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c2aa86"},"children":[{"type":"text","value":"prevProps"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c2aa86"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-50be53"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c2aa86"},"children":[{"type":"text","value":"props"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":" }, ["}]},{"type":"element","tag":"span","props":{"class":"ct-c2aa86"},"children":[{"type":"text","value":"props"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-c2aa86"},"children":[{"type":"text","value":"prefix"}]},{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":"]);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-957903"},"children":[{"type":"text","value":"};"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-6ba254{color:#D2A8FF}.ct-ebf9df{color:#79C0FF}.ct-f51b9a{color:#79C0FF}.ct-d81651{color:#FFA657}.ct-6b4fe7{color:#FF7B72}.ct-072d13{color:#FFA657}.ct-c40951{color:#C9D1D9}.ct-64a834{color:#D2A8FF}.ct-10d630{color:#FF7B72}.ct-71d755{color:#8B949E}.ct-2256ee{color:#A5D6FF}.ct-c2aa86{color:#C9D1D9}.ct-957903{color:#C9D1D9}.ct-50be53{color:#FF7B72}.light .ct-50be53{color:#859900}.light .ct-957903{color:#657B83}.light .ct-c2aa86{color:#268BD2}.light .ct-2256ee{color:#2AA198}.light .ct-71d755{color:#93A1A1}.light .ct-10d630{color:#073642}.light .ct-64a834{color:#268BD2}.light .ct-c40951{color:#657B83}.light .ct-072d13{color:#657B83}.light .ct-6b4fe7{color:#859900}.light .ct-d81651{color:#268BD2}.light .ct-f51b9a{color:#859900}.light .ct-ebf9df{color:#268BD2}.light .ct-6ba254{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"} |