-
ํ๋ก์ ํธ TIL (1) - [์กฐ๊ฑด๋ถ๋ ๋๋ง & Hooks ์ต์ ํ]ํ๋ก์ ํธ ๋ฆฌ๋ทฐ/Book-Square 2020. 9. 11. 14:33
์ค๋ ํ ์ผ ๐
์ค๋์ ๋ด ์์ฌ ํ์ด์ง์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ UI๋ฅผ ๋ณด์ฌ์ค ์ ์๋ ํ๋ฉด์ ๊ตฌํํ์ต๋๋ค.
์ผํญ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์กฐ๊ฑด์ ๋ถ๋ฆฌํ๋๋ฐ ๊ฐ๋ ์ฑ๋ ์ข์ง ์์ ๊ฒ ๊ฐ๊ณ ์ด๋ฌํ ์กฐ๊ฑด์ด ๋ง์์ง๊ฒ ๋๋ค๋ฉด ๋ ๋๋ง ๋ ๋์ UI๊ฐ ๋งค๋๋ฝ๊ฒ ๋ณด์ฌ์ง์ง ์์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ ํ๊ฒ ๋์์ต๋๋ค.
๋จผ์ ์ผํญ์ฐ์ฐ์๋ฅผ ํตํด ์์ฑํ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์์ ์ฝ๋๋ฅผ ์๋์ฝ๋์ if/else ์ฝ๋๋ก ์์ฑํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ํ ์ํ์ด๊ณ ๋ด ์์ฌ์ ๋ฑ๋กํ ์ฑ ์ด ์์ ๊ฒฝ์ฐ
2. ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ํ ์ํ์ด๊ณ ๋ด ์์ฌ์ ๋ฑ๋กํ ์ฑ ์ด ์๋ ๊ฒฝ์ฐ
3. ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ํ์ง ์์ ์ํ์ธ ๊ฒฝ์ฐ
if(loggedUserCheck && myLibraryBookLists) { // ... }else if(loggedUser && !myLibraryBookLists) { // ... }else if(!loggedUser) { // ... }
๋ด๊ฐ ์์ฑํ ์ฝ๋์ด๊ธฐ ๋๋ฌธ์ ๋๋ ์์๋ณผ ์ ์์ง๋ง ์ฝ๋๋ ๋๋ง ์์๋ณด๊ธฐ ์ํด ์์ฑํ๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ๊ฐ๋ ์ฑ์ ๊ณ ๋ คํ์ง ์์ ์ ์์์ต๋๋ค. ์ง๊ธ์ ์กฐ๊ฑด์ด 3๊ฐ์ง๋ผ์ ๋ณต์กํด๋ณด์ด์ง๋ ์์ง๋ง ์์ผ๋ก ๋ ์ถ๊ฐ๋ ์ง๋ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ์ฒ์๋ถํฐ ๊ฐ๋ ์ฑ์ ์๊ฐํ๊ณ ์์ฑํ๋ ๊ฒ์ด ์ข๋ค๊ณ ์๊ฐํ์ต๋๋ค.
์ฐธ๊ณ ๋ ํผ๋ฐ์ค
https://stackoverflow.com/questions/58137667/if-else-statement-in-react-jsx
https://stackoverflow.com/questions/53038034/conditional-rendering-for-more-for-more-then-one-condition-in-reactstackOverFlow์์ ๊ฒ์ํ ์์ ์๋ฃ๋ค์ ์ฐธ๊ณ ํ์ฌ ๋ค์ ์์ฑํ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
renderOrDetails๋ผ๋ ํจ์๋ฅผ ํ๋ ์ ์ธํ๊ณ return๋ฌธ ์์์ ๋ ๋๋ง ๋ ๋์ ์ค๊ดํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ด ํจ์๋ฅผ ์คํ์์ผ ์ฃผ์์ต๋๋ค.
๊ตฌ๊ธ๋ง์ ํ๋ฉด ์ด๋ ๊ฒ ๋ณต์กํ ์กฐ๊ฑด๋ถ ๋ ๋๋ง์ ๋ฐ๋ก ํจ์๋ก ๋นผ๋ ์ด์ ๊ฐ ํ์ฅ์ฑ / ๊ฐ๋ ์ฑ / ์ ์ง ๋ณด์์ฑ์ ํฅ์์ํฌ ์ ์์ด์ ๋ ๋์ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ํ๋๋ฐ ์์ง๊น์ง๋ ํฌ๊ฒ ์๋ฟ์ง๋ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ ๋์๊ฐ๋ฉฐ (ํจ์์ ์ต์ ํ)
renderOrDetails ํจ์์ ์ต์ ํ๋ฅผ ์ด๋ป๊ฒ ํ๋ฉด ์ข์์ง์ ๋ํด ๊ณ ๋ฏผํ๊ฒ ๋์์ต๋๋ค.
React๊ฐ ๋ ๋๋ง์ ์คํํ๋ ๊ณผ์
- Props๊ฐ ๋ณ๊ฒฝ๋์์ ๋
- State๊ฐ ๋ณ๊ฒฝ๋์์ ๋
- ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋์์ ๋
- shouldComponentUpdate์์ true๊ฐ ๋ฐํ๋ ๋
- forceUpdate๊ฐ ์คํ๋ ๋
1๋ฒ๊ณผ 2๋ฒ์ ๊ฒฝ์ฐ ๋ฆฌ์กํธ๋ ์์ ๋น๊ต๋ฅผ ํตํด ์๋ก์ด ๊ฐ์ธ์ง ์๋์ง๋ฅผ ํ๋จํ ํ ์๋ก์ด ๊ฐ์ธ ๊ฒฝ์ฐ ๋ฆฌ๋ ๋๋ง์ ํ๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์์ ๊ฐ๋ค์ ์๋ก ๋ค๋ฅธ ์ฐธ์กฐ ๊ฐ์ ๊ฐ์ง๊ณ ์์ด๋ ๋น๊ตํจ์ ์์ด ๋ฌธ์ ๊ฐ ์์ง๋ง ๊ฐ์ฒด, ๋ฐฐ์ด, ํจ์์ ๊ฐ์ ๊ฐ์ฒด๋ค์ ๊ฐ์ ์ฐธ์กฐ ๊ฐ์ด ์๋๋ผ๋ฉด ์๋ก์ด ๊ฐ์ผ๋ก ํ๋จํฉ๋๋ค.
์์ ์ปดํฌ๋ํธ์ state ๋ณ๊ฒฝ -> ์์ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋๋ฉด์ ํ์ ์ปดํฌ๋ํธ์ ๋๊ฒจ์ฃผ๋ props๊ฐ ์๋กญ๊ฒ ์์ฑ -> props์ ์ฐธ์กฐ ํ์ ์ด ์๋ค๋ฉด ๋์ผํ ๊ฐ์ด๋ผ๋ ๋์ผ ์ฐธ์กฐ ๊ฐ์ด ์๋๋ฏ๋ก ์์ ๋น๊ต๋ฅผ ํตํด ์๋ก์ด ๊ฐ์ผ๋ก ํ๋จํ์ฌ ๋ฆฌ๋ ๋๋ง์ ์ผ์ผํด
์์ ๊ฐ์ ์ํฉ์์ ๋ถํ์ํ ๋ ๋๋ง์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ฒ ์ค์ useCallback, React.memo ๊ฐ ์์ต๋๋ค.
Hooks์์ ์ต์ ํํ๊ธฐ
useMemo(callback, [๋ณ๊ฒฝ๋๋ ๊ฐ]);
- ๋ ๋ฒ์งธ ๋ฐฐ์ด์ด ๋ฐ๋๊ธฐ ์ ๊น์ง ๊ฐ์ ๊ธฐ์ต
- ํจ์ ์ปดํฌ๋ํธ๋ ๋งค๋ฒ ํจ์๊ฐ ์๋ก ๋ ๋๋ง๋๊ธฐ ๋๋ฌธ์ ํ๋ฒ๋ง ์คํ๋๋ฉด ๋๋ ํจ์๋ ๊ณ์ ํธ์ถ๋๋ ๋ฌธ์ ๋ฐ์
- ๋ณ๊ฒฝ๋๋ ๊ฐ์ด ์๋ค๋ฉด ํ๋ฒ๋ง ์คํ ํ ๊ฐ์ ๋ณด๊ดํ๋ ์ญํ ๋ก ์ฌ์ฉ๊ฐ๋ฅ
useRef()์ useMemo์ ์ฐจ์ด์
- useRef : Dom๊ฐ์ฒด ์ฒ๋ผ ํน์ ํ ๊ฐ๋ง ๊ธฐ์ตํด์ผํ ๋
- useMemo : ํจ์์ return๊ฐ์ ๊ธฐ์ตํด์ผ ํ ๋
useCallback(callback, [๋ณ๊ฒฝ๋๋ ๊ฐ]);
- ๋ ๋ฒ์งธ ๋ฐฐ์ด์ด ๋ฐ๋๊ธฐ ์ ๊น์ง ํจ์ ์์ฒด๋ฅผ ๊ธฐ์ต
- ํจ์ ์์ฑ ์์ฒด๊ฐ ์ค๋๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ๋ ๋ณต์กํ ๋ก์ง์ ํจ์์ ์ฌ์ฉํ๋ฉด ์ต์ ํ ๊ฐ๋ฅ
- ๋ณ๊ฒฝ๋๋ ๊ฐ์ด ์๋ค๋ฉด state๊ฐ์ ๋งจ ์ฒ์ ๊ฐ๋ง ๊ธฐ์ต
- ๋ณ๊ฒฝ๋๋ ๊ฐ์ด ์์ ๋ ์๋ก์ด ๊ฐ์ ๊ธฐ์ตํ ์ ์๋ค.
- ์์ ์ปดํฌ๋ํธ์ ํจ์๋ฅผ Props๋ก ๋ด๋ฆด ๋๋ useCallback์ ๋ฐ๋์ ์ฌ์ฉ (์์ ๋ฆฌ๋ ๋๋ง ๋ฐฉ์ง)
useMemo์ useCallback์ ์ฐจ์ด์
- useMemo : ํจ์์ return ๊ฐ์ ๊ธฐ์ต
- useCallback : ํจ์์ reference๋ฅผ ๊ธฐ์ต
์์์ ์์๋ณธ ์ต์ ํ ๋ฐฉ๋ฒ ์ค์ ์ ๊ฐ ์์ฑํ renderOrDetails ํจ์์์๋ useMemo๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ๋ค๋ ํ๋จ์ ํ์ต๋๋ค.
useMemo ์ ์ฉ ์ฝ๋ ์กฐ๊ฑด๋ถ ๋ ๋๋ง์ ๊ฐ๋ ์ฑ๊ณผ ํ์์ฑ์ ๊ณ ๋ คํ์ฌ ์กฐ๊ธ ๋ ๋์ ๋ฐฉ๋ฒ์ ํํ๊ธฐ ์ํด ๊ตฌ๊ธ๋ง์ ํ๋ฉด์ ์ต์ ํ๊น์ง ์ ๊ฒฝ์ธ ์ ์๊ฒ ๋์ด ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ์ข์ ๊ณต๋ถ๊ฐ ๋์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์์ง ๋ค๋ฅธ ์ปดํฌ๋ํธ์๋ ์ต์ ํ๋ฅผ ์งํํ์ง ์์๋๋ฐ ์ด๋์ ๋ UI๊ฐ ์์ฑ๋๊ณ ๋๋ฉด ์๊ฐ์ ๋ด์ ์ต์ ํ๋ฅผ ์ ์ฉํ์ฌ ๋ฆฌํฉํ ๋ง์ ๊ผญ ํด์ผ๊ฒ ์ต๋๋ค!!!!!!!!!
( ์ฝ๋ ์์ฑํ๋ ๊ฒ ๋ณด๋ค ์ต์ ํ๋ฅผ ์ ๊ฒฝ์ฐ๋๊ฒ ์ ๋ ํ๋ค ๊ฒ ๊ฐ๋ค๋ ๋๋์ ์ธ ๋๋์ด ์ค๋๊ฑธ๊น.....................๋๋ฌด ๊ณผํ ์ต์ ํ๋ ์ํ๋ ๊ฒ๋ณด๋ค ๋ชปํ๋ค๊ณ ํ๋ ๊ตฌ๊ธ๋ง์ ํตํด ๊ณต๋ถ๋ฅผ ๋ ํ ํ ์ ์ฉํด๋ด์ผ๊ฒ ๋ค........^^)
'ํ๋ก์ ํธ ๋ฆฌ๋ทฐ > Book-Square' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ