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-248f9d"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-125158"},"children":[{"type":"text","value":"useEffect"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-125158"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-248f9d"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4f33da"},"children":[{"type":"text","value":"'react'"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"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-78bf96"},"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-78bf96"},"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-78bf96"},"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-78bf96"},"children":[{"type":"text","value":" */"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-248f9d"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b35687"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d5f0a8"},"children":[{"type":"text","value":"useWhatsChanged"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-248f9d"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-91ac11"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3b4dfe"},"children":[{"type":"text","value":"props"}]},{"type":"element","tag":"span","props":{"class":"ct-f8ed36"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-91ac11"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0f428b"},"children":[{"type":"text","value":"Record"}]},{"type":"element","tag":"span","props":{"class":"ct-91ac11"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-74cd43"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-91ac11"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-74cd43"},"children":[{"type":"text","value":"unknown"}]},{"type":"element","tag":"span","props":{"class":"ct-91ac11"},"children":[{"type":"text","value":">,"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-125158"},"children":[{"type":"text","value":"prefix"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-248f9d"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4f33da"},"children":[{"type":"text","value":"''"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-b35687"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b35687"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b14dab"},"children":[{"type":"text","value":"prevProps"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-248f9d"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d5f0a8"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-125158"},"children":[{"type":"text","value":"props"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"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-60fed9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d5f0a8"},"children":[{"type":"text","value":"useEffect"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-b35687"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-91ac11"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-74cd43"},"children":[{"type":"text","value":"Object"}]},{"type":"element","tag":"span","props":{"class":"ct-91ac11"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-363cbb"},"children":[{"type":"text","value":"entries"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-248f9d"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-125158"},"children":[{"type":"text","value":"prevProps"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-125158"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":"["}]},{"type":"element","tag":"span","props":{"class":"ct-125158"},"children":[{"type":"text","value":"key"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":"] "}]},{"type":"element","tag":"span","props":{"class":"ct-248f9d"},"children":[{"type":"text","value":"!=="}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-125158"},"children":[{"type":"text","value":"value"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" ) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-125158"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-d5f0a8"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-4f33da"},"children":[{"type":"text","value":"`${"}]},{"type":"element","tag":"span","props":{"class":"ct-125158"},"children":[{"type":"text","value":"prefix"}]},{"type":"element","tag":"span","props":{"class":"ct-4f33da"},"children":[{"type":"text","value":"} ${"}]},{"type":"element","tag":"span","props":{"class":"ct-125158"},"children":[{"type":"text","value":"key"}]},{"type":"element","tag":"span","props":{"class":"ct-4f33da"},"children":[{"type":"text","value":"} has changed`"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"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-60fed9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-125158"},"children":[{"type":"text","value":"prevProps"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-125158"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-248f9d"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-125158"},"children":[{"type":"text","value":"props"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":" }, ["}]},{"type":"element","tag":"span","props":{"class":"ct-125158"},"children":[{"type":"text","value":"props"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-125158"},"children":[{"type":"text","value":"prefix"}]},{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":"]);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-60fed9"},"children":[{"type":"text","value":"};"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-363cbb{color:#D2A8FF}.ct-b14dab{color:#79C0FF}.ct-74cd43{color:#79C0FF}.ct-0f428b{color:#FFA657}.ct-f8ed36{color:#FF7B72}.ct-3b4dfe{color:#FFA657}.ct-91ac11{color:#C9D1D9}.ct-d5f0a8{color:#D2A8FF}.ct-b35687{color:#FF7B72}.ct-78bf96{color:#8B949E}.ct-4f33da{color:#A5D6FF}.ct-125158{color:#C9D1D9}.ct-60fed9{color:#C9D1D9}.ct-248f9d{color:#FF7B72}.light .ct-248f9d{color:#859900}.light .ct-60fed9{color:#657B83}.light .ct-125158{color:#268BD2}.light .ct-4f33da{color:#2AA198}.light .ct-78bf96{color:#93A1A1}.light .ct-b35687{color:#073642}.light .ct-d5f0a8{color:#268BD2}.light .ct-91ac11{color:#657B83}.light .ct-3b4dfe{color:#657B83}.light .ct-f8ed36{color:#859900}.light .ct-0f428b{color:#268BD2}.light .ct-74cd43{color:#859900}.light .ct-b14dab{color:#268BD2}.light .ct-363cbb{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"} |