[React] ๋ฆฌ์กํธ Profiler ํ๋กํ์ผ๋ฌ์ Hook ์์
๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ ๋ฆฌ๋ ๋๋ง ์์ธ์ ํ์ ํ ๋ ๋ฆฌ์กํธ ๊ฐ๋ฐ์ ๋๊ตฌ์ Profiler(ํ๋กํ์ผ๋ฌ) ํญ์ ํ์ฉํ๋ค.
๋ง์ฝ Profiler ํญ์์ Hook 1 changed๋ฅผ ํ์ํ๋ค๋ฉด, Hook 1์ Components ํญ → ํด๋น ์ปดํฌ๋ํธ์ hooks ํญ๋ชฉ์์ 1๋ฒ์งธ ๋ด์ฅ ํ
์(useState
๋ฑ) ๊ฐ๋ฆฌํจ๋ค.
์ด๋ ์ฃผ์ํ ์ ์ Profiler์์ ํ
์ ์นด์ดํธํ ๋ useContext
, ์ปค์คํ
ํ
์ ์๋ตํ๋ค๋ ๊ฒ์ด๋ค. ๋์ ์ปค์คํ
ํ
์ ๋ด๋ถ์ ์๋ ๋ชจ๋ ๋ด์ฅ ํ
(useContext
์ ์ธ)์ ์นด์ดํธ ํ๋ค.
์๋ฅผ ๋ค์ด ๋ด์ฅ ํ
1๊ฐ์ ์ปค์คํ
ํ
์ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์. ์ปค์คํ
ํ
์์์ ๋ด์ฅ ํ
2๊ฐ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค. ๊ทธ๋ผ ์ด ์ปดํฌ๋ํธ์ ํ
์ธ๋ฑ์ค๋ ์ปดํฌ๋ํธ ๋ด์ฅ ํ
1
, ์ปค์คํ
ํ
๋ด์ฅ ํ
2
, 3
์ด ๋๋ค. ์ปค์คํ
ํ
์ ์๋ 2๋ฒ์งธ ๋ด์ฅ ํ
๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด Profiler์์ Hook 3 changed๋ฅผ ํ์ํ๋ค.
function useHooks(defaultValue = 1) {
const [hookTwo, setHookTwo] = useState(defaultValue); // ๋ด์ฅ ํ
Hook 2
const [hookThree, setHookThree] = useState(defaultValue); // ๋ด์ฅ ํ
Hook 3
return [hookTwo, setHookTwo, hookThree, setHookThree];
}
function App() {
const [hookOne, setHookOne] = useState(1); // ๋ด์ฅ Hook 1
const [hookTwo, setHookTwo, hookThree, setHookThree] = useHooks(); // ์ปค์คํ
ํ
return (
<div className="App">
<button onClick={() => setHookOne((prev) => prev + 1)}>{`hookOne: ${hookOne}`}</button>
<button onClick={() => setHookTwo((prev) => prev + 1)}>{`hookTwo: ${hookTwo}`}</button>
<button onClick={() => setHookThree((prev) => prev + 1)}>{`hookThree: ${hookThree}`}</button>
</div>
);
}
hookThree
์ํ๋ ์ปค์คํ
ํ
์ ๋๋ฒ์งธ ๋ด์ฅ ํ
(useState
)์ด๋ค. ๋ฒํผ์ ํด๋ฆญํด์ ์ด ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ๋ฆฌ์กํธ ๊ฐ๋ฐ์ ๋๊ตฌ Profiler ํญ์์ Hook 3 changed๋ฅผ ํ์ํ๋ค.
Hook 3์ Components ํญ → App ์ปดํฌ๋ํธ → Hooks(์ปค์คํ ํ ์ ๋ด์ฅ ํ )์ ๋๋ฒ์งธ ํญ๋ชฉ์ ๊ฐ๋ฆฌํจ๋ค. ์ฆ, ๋ฆฌ์กํธ ๊ฐ๋ฐ์ ๋๊ตฌ์์ ์ปค์คํ ํ ์์ฒด๋ ์นด์ดํธ ํ์ง ์๊ณ , ์ปค์คํ ํ ๋ด๋ถ์ ์๋ ๋ด์ฅ ํ ์ ์นด์ดํธ ํ๋ค.
๐ก ์๋ 2๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ปดํฌ๋ํธ ๋ฆฌ๋ ๋๋ง ์์ธ์ ์ถ์ ํด๋ณผ ์๋ ์๋ค(์จ๋ํํฐ๋ ์ถ์ ํ๋ฆ)
- useWhyDidYouUpdate (์ปค์คํ ํ )
- why-did-you-render (๋ผ์ด๋ธ๋ฌ๋ฆฌ)
๐ก ๋ฆฌ๋ ๋๋ง์ด ๋ง์ผ๋ฉด ๋ฆฌ์กํธ Profiler๋ฅผ ํตํ ์ถ์ ํ๊ธฐ ๊น๋ค๋ก์์ง๋ค. ์ด๋ ํฌ๋กฌ Performance(์ฑ๋ฅ) ํญ์ ํ์ฉํ ์ ์๋ค. ๋ ์์ธํ ๋ด์ฉ์ ๋งํฌ ์ฐธ๊ณ .
๊ธ ์์ ์ฌํญ์ ๋ ธ์ ํ์ด์ง์ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋ฐ์๋ฉ๋๋ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์
'๐ช Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[TS] TypeScript ํ์ ์คํฌ๋ฆฝํธ satisfies ์ฐ์ฐ์
[TS] TypeScript ํ์ ์คํฌ๋ฆฝํธ satisfies ์ฐ์ฐ์
2024.05.16 -
[React/JS] Promise ํ๋ก๋ฏธ์ค๋ฅผ ํ์ฉํ UX ๊ฐ์ — ํด ๋ฏธ๋ฃจ๊ธฐ
[React/JS] Promise ํ๋ก๋ฏธ์ค๋ฅผ ํ์ฉํ UX ๊ฐ์ — ํด ๋ฏธ๋ฃจ๊ธฐ
2024.05.16 -
[DevTools] iPhone ์์ดํฐ ์ฌํ๋ฆฌ์์ ๋๋ฒ๊น / ์ฝ์ ์ฌ์ฉํ๊ธฐ
[DevTools] iPhone ์์ดํฐ ์ฌํ๋ฆฌ์์ ๋๋ฒ๊น / ์ฝ์ ์ฌ์ฉํ๊ธฐ
2024.05.16 -
[JS/React] input ํ๋์ ์ซ์๋ง ์ ๋ ฅ ํ์ฉํ๊ธฐ (ํ๊ธ ์ ๋ ฅ ๋ฐฉ์ง)
[JS/React] input ํ๋์ ์ซ์๋ง ์ ๋ ฅ ํ์ฉํ๊ธฐ (ํ๊ธ ์ ๋ ฅ ๋ฐฉ์ง)
2024.05.16