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-7ec539"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-3cce2a"},"children":[{"type":"text","value":"useEffect"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-3cce2a"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-7ec539"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d5d08"},"children":[{"type":"text","value":"'react'"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"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-7a0006"},"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-7a0006"},"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-7a0006"},"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-7a0006"},"children":[{"type":"text","value":" */"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7ec539"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e2ac3d"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fddfb0"},"children":[{"type":"text","value":"useWhatsChanged"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7ec539"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7321a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9c555a"},"children":[{"type":"text","value":"props"}]},{"type":"element","tag":"span","props":{"class":"ct-7c9693"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-7321a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-682427"},"children":[{"type":"text","value":"Record"}]},{"type":"element","tag":"span","props":{"class":"ct-7321a2"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-e1c665"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-7321a2"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-e1c665"},"children":[{"type":"text","value":"unknown"}]},{"type":"element","tag":"span","props":{"class":"ct-7321a2"},"children":[{"type":"text","value":">,"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3cce2a"},"children":[{"type":"text","value":"prefix"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7ec539"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d5d08"},"children":[{"type":"text","value":"''"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-e2ac3d"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e2ac3d"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7def83"},"children":[{"type":"text","value":"prevProps"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7ec539"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fddfb0"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-3cce2a"},"children":[{"type":"text","value":"props"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"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-1ee419"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fddfb0"},"children":[{"type":"text","value":"useEffect"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-e2ac3d"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7321a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e1c665"},"children":[{"type":"text","value":"Object"}]},{"type":"element","tag":"span","props":{"class":"ct-7321a2"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-af5044"},"children":[{"type":"text","value":"entries"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7ec539"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3cce2a"},"children":[{"type":"text","value":"prevProps"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-3cce2a"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":"["}]},{"type":"element","tag":"span","props":{"class":"ct-3cce2a"},"children":[{"type":"text","value":"key"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":"] "}]},{"type":"element","tag":"span","props":{"class":"ct-7ec539"},"children":[{"type":"text","value":"!=="}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3cce2a"},"children":[{"type":"text","value":"value"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" ) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3cce2a"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-fddfb0"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-6d5d08"},"children":[{"type":"text","value":"`${"}]},{"type":"element","tag":"span","props":{"class":"ct-3cce2a"},"children":[{"type":"text","value":"prefix"}]},{"type":"element","tag":"span","props":{"class":"ct-6d5d08"},"children":[{"type":"text","value":"} ${"}]},{"type":"element","tag":"span","props":{"class":"ct-3cce2a"},"children":[{"type":"text","value":"key"}]},{"type":"element","tag":"span","props":{"class":"ct-6d5d08"},"children":[{"type":"text","value":"} has changed`"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"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-1ee419"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3cce2a"},"children":[{"type":"text","value":"prevProps"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-3cce2a"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7ec539"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3cce2a"},"children":[{"type":"text","value":"props"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":" }, ["}]},{"type":"element","tag":"span","props":{"class":"ct-3cce2a"},"children":[{"type":"text","value":"props"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-3cce2a"},"children":[{"type":"text","value":"prefix"}]},{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":"]);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1ee419"},"children":[{"type":"text","value":"};"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-af5044{color:#D2A8FF}.ct-7def83{color:#79C0FF}.ct-e1c665{color:#79C0FF}.ct-682427{color:#FFA657}.ct-7c9693{color:#FF7B72}.ct-9c555a{color:#FFA657}.ct-7321a2{color:#C9D1D9}.ct-fddfb0{color:#D2A8FF}.ct-e2ac3d{color:#FF7B72}.ct-7a0006{color:#8B949E}.ct-6d5d08{color:#A5D6FF}.ct-3cce2a{color:#C9D1D9}.ct-1ee419{color:#C9D1D9}.ct-7ec539{color:#FF7B72}.light .ct-7ec539{color:#859900}.light .ct-1ee419{color:#657B83}.light .ct-3cce2a{color:#268BD2}.light .ct-6d5d08{color:#2AA198}.light .ct-7a0006{color:#93A1A1}.light .ct-e2ac3d{color:#073642}.light .ct-fddfb0{color:#268BD2}.light .ct-7321a2{color:#657B83}.light .ct-9c555a{color:#657B83}.light .ct-7c9693{color:#859900}.light .ct-682427{color:#268BD2}.light .ct-e1c665{color:#859900}.light .ct-7def83{color:#268BD2}.light .ct-af5044{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"} |