Today, What I learned
ํํฐ๋์ ์์ธํ!.. ๊ฑฐ์ ์ ์ ํ ์คํธ ๊ธ์ ํผ๋๋ฐฑ์ ํตํด ๋ฐ๊ฒฌํ ๋ฒ๊ทธ..
๋ฒ๊ทธ ํด๊ฒฐ ๊ณผ์ ์ ๊ธฐ๋กํด ๋ณธ๋ค.
ํ์ฌ ๋ด๊ฐ ์์ ํ ๋ง์ดํ์ด์ง์๋ ์ด๋ฐ ๋ฒ๊ทธ๊ฐ ์๋ค.
๊ธฐ์กด ์ ์ ์ ๋ณด์ ๋ฌ๋ผ์ก์ ๋๋ง ๋ฒํผ์ ํ์ฑํ์์ผ์ผ ํ๋๋ฐ, ์ ํจ์ฑ ๊ฒ์ฌ์ ๊ทธ ๋ถ๋ถ์ ๋นผ๋จน์ด์..
์์ ํ๋๋์ ์ฌ๋ถ์ ์๊ด์์ด ๊ณ์ํด์ ์๋ฒ์๊ฒ ์์ฒญ์ ํ ์ ์๋ ์ํ์๋ค!!... ((OMG))
์ด๋ฐ ์๋ฏธ ์๋ ๋ฆฌ์์ค ๋ญ๋น๋ฅผ ๋ง๋ ์ผ์ด์ผ๋ง๋ก ํ๋ก ํธ์๋๋ก์ ํด์ผ ํ ์ผ... ๐
State ์ถ๊ฐํ๊ธฐ
ํด๊ฒฐ์ ์ํด ์ด๊ธฐ ๋ ๋๋ง ์ ์ ์ฅ๋ ์ ์ ์ ์ ๋ณด๋ฅผ ๋ฐ์์ฌ state๋ฅผ ํ๋ ๋ง๋ค์๋ค.
const [defaultUserInfo, setDefaultUserInfo] = useState<UserInfo>(defaultInfo);
์ข ์ฌ๋ฌ ๊ตฐ๋ฐ์์ ์ฐ์ผ ๊ฒ์ด๋ผ ์ฝ๋ ์์ ์ค์ด๊ธฐ ์ํด setState ํจ์๋ฅผ ๋ณ๋์ ํจ์๋ก ๋ง๋ค์ด์ฃผ์๋ค.
const updateDefaultUserInfoState = useCallback((user: UserInfo) => {
setDefaultUserInfo({
displayName: user?.displayName,
email: user?.email,
photoURL: user?.photoURL,
isJunior: user?.isJunior,
positions: user?.positions,
plannerStack: user?.plannerStack || [''],
designerStack: user?.designerStack || [''],
developerStack: user?.developerStack || [''],
});
}, []);
๊ธฐ์กด state์ ๋ณ๊ฒฝ๋ state ๋น๊ตํ๊ธฐ
๋ ๊ธฐ์กด ์ ๋ณด์ ์๋กญ๊ฒ ์์ ํ ์ ๋ณด๊ฐ ๊ฐ์์ง ํ์ธํด์ ๋ฒํผ์ ํ์ฑํ์์ผ์ผ ํ๊ธฐ ๋๋ฌธ์ useEffect
๋ฅผ ํ๋ ์ถ๊ฐํ๋ค.
// ๊ธฐ์กด ์ ๋ณด์์ ๋ณ๊ฒฝ๋ ์ ๋ณด๊ฐ ์์ ๊ฒฝ์ฐ์๋ง ์์ ๋ฒํผ ํ์ฑํ
useEffect(() => {
if (JSON.stringify(defaultUserInfo) !== JSON.stringify(userInfo)) {
setActiveInfoBtn(true);
} else {
setActiveInfoBtn(false);
}
}, [userInfo]);
๋ state๋ ๊ฐ์ฒด์ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ===
์ฐ์ฐ์๋ก ์ผ์นํ๋ ์ง๋ฅผ ํ์ธํ ์ ์๋ค. (๊ฐ์ฒด๋ ์ฐธ์กฐ๊ฐ์ด๊ธฐ ๋๋ฌธ์)
๊ทธ๋์ ๊ฐ์ฒด๊ฐ์ ์๋ก ๋น๊ตํ ๋์ ๋ฐฉ๋ฒ์ด ๋ช ๊ฐ์ง๊ฐ ์๋๋ฐ, ์ฃผ๋ก ๋ฌธ์์ด๋ก ๋ณํํ์ฌ ๋น๊ตํ๋ค.
Object.entries(obj)
์ ๊ฐ์ tostring()
์ผ๋ก ๋ฌธ์์ด๋ก ๋ฐ๊พธ์ด ๋น๊ตํ๊ธฐ
if (Object.entries(defaultObj).toString() !== Object.entries(currentObj).toString()) ...
JSON.stringify
๋ก ๋น๊ตํ๊ธฐ
if (JSON.stringify(defaultUserInfo) !== JSON.stringify(userInfo)) { ...
JSON.stringyfy()
๋ ๊ฐ์ฒด๋ฅผ JSON ๋ฌธ์์ด๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ด ์ฝ๋๊ฐ ์ข ๋ ๊ฐ๊ฒฐํ๊ณ ์ง๊ด์ ์ธ ๊ฒ ๊ฐ์ ์ ํ!
์์ ์๋ฃ ํ ๋ค์ ๋ฒํผ ๋นํ์ฑํํ๊ธฐ
์์ ์๋ฃ ๋ฒํผ์ ๋๋ ์ ๋๋ ๋ค์ ๊ธฐ์กด ์ ๋ณด๋ฅผ ์์ ํ ์ ๋ณด๋ก ๊ฐฑ์ ํด์ ์์ ๋ฒํผ์ด ๋นํ์ฑํ๋๋๋ก ์์ ํ๋ค.
const handleUserInfoConfirm = () => {
...
setActiveInfoBtn(false);
updateDefaultUserInfoState(userInfo); // <<<<
};
์ ์ ๋์
์์ ํ ๊ฒ์ ๋ณด๋ฉด ๋ฒํผ์ด ์ด์ ์ ์ ํ๊ฒ ํ์ฑํ, ๋นํ์ฑํ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค!..
๋ถํ์ํ ๋ฆฌ์์ค ์์ฒญ์ ์ด๋ป๊ฒ ์ค์ผ ์ ์์ ๊ฒ์ธ๊ฐ์ ๋ํด ์ถ๊ฐ์ ์ผ๋ก ๋ ๊ณ ๋ฏผํด ๋ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ ํ๋ฃจ.. ๐ค
'๐ Studying > ๐ TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] React.memo, useMemo, useCallback (0) | 2023.02.24 |
---|---|
[React] useEffect์ ์คํ ์์ (1) | 2023.02.23 |
[React] React.lazy ์ Suspense (0) | 2023.02.20 |
[React] ํ๋ก์ ํธ ๋ฆฌ์คํธ ํํฐ๋ง ์ฌ์ (2) - 3์ค ์ค์ฒฉ ๊ฐ์ฒด (0) | 2023.02.17 |
[React] ํ๋ก์ ํธ ๋ฆฌ์คํธ ํํฐ๋ง ์ฌ์ (1) - Promise.all (0) | 2023.02.16 |
Comment