230718(ํ)
๐ค ์ฑ์ฅ์ผ์ง 6.0
์ฑ
ํ๋ณตํ ์ด๊ธฐ์ฃผ์์(์จ์ธ ๋ค์ด์ด)
์ ๋ด์ฉ์ ์๊ทน๋ฐ์ ์์ํ๋ ์๋ฐํ ์ฑ์ฅ๊ธฐ๋ก
์ด์์๋ ๊ฝ๊ณผ ์ฃฝ์ ๊ฝ์ ์ด๋ป๊ฒ ๊ตฌ๋ณํ๋๊ฐ?
์ฑ์ฅํ๊ณ ์๋ ๊ฒ์ด ์ด์ ์๋ ๊ฒ์ด๋ค.
์๋ช ์ ์ ์ผํ ์ฆ๊ฑฐ๋ ์ฑ์ฅ์ด๋ค!
๐พ (4.0)ํ์ต ํค์๋์์ ์ต๋ํ ๊ฐ๋จํ ์ ๋ณด ์ ๊ณต, ๊ณ ๋ฏผ์์ ๋ด ๊ฒฝํ์ ์์ธํ ์ ์!
๐ฅ (5.0)ํ์ต ํค์๋๋ ํ์ค์ ํต์ฌ์ผ๋ก๋ง ์ ๋ฆฌ, ์ฑ๊ณต/์คํจ ์ผ์ง ์์ฑํ๊ธฐ! ์ด ๋, ์คํจ์ ๊ฒฝํ์ ์์ธํ ์ ๊ธฐ!
๐ (6.0)<์์ ๊ฐํธ!!!> ๋งค์ผ ์ต๊ด์ ์ผ๋ก ํต์ฌ๋ง ์ ์ ์ ์๊ฒ ํ๋ ์ ๋ณ๊ฒฝ. ์ฑ๊ณต๋ณด๋จ ์คํจ์ ์ด์ ์ ๋ง์ถ๊ธฐ.
- ๐ (6.1)<์์ > ๋งค๋ฒ ์ฑ๊ณต, ์คํจ๋ฅผ ๋ฐ๋ก ์ ๋ ๊ฒ๋ณด๋จ ๊ฒฝํ์ผ๋ก ํํํ์
๐ ์ค๋์ ๊ฐ์
์ค๋์ ๋๋ฌด ์ ์ด ์์ ๋ฎ์ ์ ์ข ๊ธธ๊ฒ ์ค๋ค. ์์ ์๋ ๊ณํ๋๋ก ๋์ง ์๊ณ ์ ์ ์๋ฉด ์คํธ๋ ์ค๋ฅผ ๋ง์ด ๋ฐ์๋๋ฐ, ์ด์ ๋ ์ ์ด ์จ๋ค๋ ๊ฒ ์์ฒด๊ฐ ๋์๊ฒ ํ์ํ๋ค๋ ๊ฑธ ์๊ธฐ์ ์คํธ๋ ์ค๋ฐ์ง ์๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋๋ ์ ์ ์๊ณ ๋๋ ๊ฐ์ดํ๊ฒ ๊ณต๋ถํ ์ ์์ด์ ๋๋ฆ๋๋ก ๊ณํ์ ์ ๋ถ ์๋ฃํ๋ค.(ํฌ์ค๋ฅผ ์๊ฐ์ง๋ง ๐คช)
๐ซง ์ค๋์ ๊ณ ๋ฏผ
๋ฆฌ๋์ค๋ฅผ ์ด๋๊น์ง ๋ฐฐ์ฐ๋ ๊ฒ ๋์๊ฐ?
์ง๊ธ ๋ฃ๊ณ ์๋ ๊ฐ์๋ ๋ฆฌ๋์ค์ ์ด๊ธฐ ๋ชจ์ต๋ถํฐ ๋ฆฌ๋์ค thunk, saga๊น์ง ๋ค๋ฃจ๊ณ toolkit์ผ๋ก ๋์ด๊ฐ๋ค. ํ์คํ redux๋ฅผ ๋ฐฐ์ฐ๊ณ ์กฐ๊ธ ์ฌ์ฉํด๋ณด๋ ์ toolkit์ด ๋์๋์ง ์ ๊ฒ ๊ฐ๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ์น๊ณค ๋๋ฌด ๋ง์ ์ ํํ๋ ์ฝ๋๊ฐ ํ์ํ ๋๋..? ์ข๋ ์์ ๋กญ๊ณ ์ ์ฌํ๊ฒ ์ฌ์ฉํ๊ธฐ ์ข์ ๊ฒ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๊ณ ์๊ฐํ๋๋ฐ, ์ด๊ฑด ๋ญ ๋ง์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ง ์ด๊ธฐ ์ค์ ์ ํ๋ ๊ณผ์ ์ ํ๋ ์์ํฌ๋ ๋ค๋ฆ์ด ์๋ค. ๋ฌผ๋ก ์ด๋ฐ ํ๋ฆ์ ๊ฑฐ์ณ์ ์ ์ ์ ํํ๋๊ณ ํ๋์ ํ๋ ์์ํฌ๋ ๋๊ตฌ๋ก ์๋ฆฌ์ก๋ ๊ฒ์ด๊ฒ ์ง ์ถ๋ค. ๊ทธ๋์ ๋์จ ๊ฒ redux-toolkit๊ณผ ๊ฐ์ ๋ฆฌ๋์ค ๋๊ตฌ ๋ชจ์์ด๊ฒ ์ง..?! ์์ง ํ๋ก์ ํธ์ ์ ๋๋ก ์ ์ฉํด๋ณธ ์ ์ ์์ง๋ง, ์ฒซ ์ธ์๊ณผ๋ ๋ค๋ฅด๊ฒ ๋ฐฐ์ธ์๋ก ์ฌ๋ฏธ์๋ ๋๋์ด๋ค!
์์ผ๋ก ํ๋ก ํธ ๊ณผ์ ์ ํ์ ๋ฐ๋๋ผ JS๋ก ํ๋ ๊ฒ ์ข์๊น, React๋ก ํ๋ ๊ฒ ์ข์๊น?
๊ธฐ์กด์๋ ๋ฐ๋๋ผ JS๋ก ๋ ๊ณผ์ ๊ฐ ์ ๋ง ๋ง์๋๋ฐ, ์ ๋ฒ์ ๋ดค๋ ํ ์ค ๊ณผ์ ๋ ๊ทธ๋ ๊ณ ๋ค๋ฅธ ๊ณผ์ ๋ค๋ React๋ก ๊ตฌํํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ์ง ๊ฑฐ ๊ฐ๋ค. ๋๋ฌด ๊ณ ๋ฏผํ์ง๋ง๊ณ ๋๋ค ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํํํ ๊ฐ์ถ๋ ๊ฒ ์ค์ํ ๊ฒ ๊ฐ๋ค. ๋๋ฌด ํจ์จ์ฑ๋ง ๋ฐ์ง๋ค๋ณด๋ฉด ์ฌ๋์ด ์ํํด์ง๋ ๊ฒฝํฅ์ด ์๋ ๊ฒ ๊ฐ์์โฆ ๊ทธ๋ฅ ์ ๋ถ ๋์๊ฒ ๋์์ด ๋๋ ๊ฒฝํ, ์๊ฐ์ผํ ๋ ๋๋ค ์ ์ค๋นํด๋ณด์!
โ๏ธ ์ค๋์ ๊ฒฝํ
Redux์ container ๊ฐ๋
Redux๋ฅผ ์ฌ์ฉํ๋ฉด์ container๋ผ๋ ๊ฐ๋ ์ ์ฒ์ ์ ํ๋ค. Redux๋ฅผ ์ฌ์ฉํ๋ฉด์ container๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ฌด์์ผ๊น? ๋จผ์ container๋ Redux์ ์ฐ๊ฒฐ๋ ์ปดํฌ๋ํธ๋ฅผ ์๋ฏธํ๋ค. Redux๋ฅผ ์ฌ์ฉํ๋ฉด์ ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฆฌํ๋ค๋ณด๋ฉด, ์ปดํฌ๋ํธ๊ฐ ๋ง์์ง๊ณ ์ปดํฌ๋ํธ ๊ฐ์ ๊ด๊ณ๊ฐ ๋ณต์กํด์ง๋ ๊ฒฝ์ฐ๊ฐ ์๊ธด๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์ ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฆฌํ๊ณ , ๋ถ๋ฆฌ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ์ญํ ์ ํ๋ ๊ฒ container์ด๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ปดํฌ๋ํธ ๊ฐ์ ๊ด๊ณ๊ฐ ๋ณต์กํด์ง๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์๊ณ , ์ฌ์ฌ์ฉ์ฑ๋ ๋์ผ ์ ์๋ค.
Redux๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์ ์ด์
Redux๋ ์ํ๋ฅผ ๋จ๋ฐฉํฅ์ผ๋ก ๋ค๋ค ์ข๋ ์ง๊ด์ ์ด๊ณ ๋ช ํํ๊ฒ ์ํ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํ Flux ์ํคํ ์ฒ์ ๋ํ ๊ตฌํ์ฒด์ด๋ค. Redux๋ฅผ ํตํด ํ ๊ณณ์์ ์ํ๋ฅผ ๊ด๋ฆฌํ ์ ์๊ณ ๊ทธ์ ๋ฐ๋ผ ์ํ์ ๋ํ ์ถ์ ์ด ์ฌ์์ง๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฐ ์ถ์ ์ ๋ ๋ณด๊ธฐ ํธํ๊ณ ๋ค๋ฃจ๊ธฐ ์ฝ๊ฒ ์ ๊ณตํด์ฃผ๋ ๊ฒ Redux DevTools์ด๋ค. Redux DevTools๋ฅผ ์ฌ์ฉํ๋ฉด ์ํ ๋ณํ๋ฅผ ํ๋์ ๋ณผ ์ ์๊ณ , ์ํ๋ฅผ ์ง์ ๋ณ๊ฒฝํ ์๋ ์๋ค. Redux Devtools๋ ๊ฒฐ๊ตญ์ Redux์ middleware๋ก ์ ๊ณต์ด ๋๋๋ฐ, ์ด middleware์ ํ์ด ๋๋ฌด ๋ง๊ฐํด์ ์กฐ๊ธ ์ฌ์ฉํด๋ณด๊ณ ์ Redux๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์ ๊ฐ์ฅ ๊ฐ๋ ฅํ ์ด์ ์ค ํ๋๊ฐ ์๋๊น ์๊ฐํ๊ฒ ๋๋ค. Redux Devtools๊ฐ ์ ์ฉ๋ ์ฌ๋ฌ ์ฌ์ดํธ๋ฅผ ๋์๋ค๋๋ฉด์ ์ํ ๋ณํ๋ฅผ ํ์ธํด๋ณด๋ ์ฝ๋๋ฅผ ๋ชจ๋ฅด๊ณ ๋ณด๋ ๊ฑด๋ฐ๋ ๊ต์ฅํ ์ง๊ด์ ์ด๊ณ ์ถ์ ํ๊ธฐ ์ฌ์ ๋ค. ํด์ ๊ฐ๋ฅํ๋ฉด ๋ค์์ ์งํํ๋ ํ๋ก์ ํธ์๋ Redux๋ฅผ ์ ์ฉํด๋ณด๊ณ ์ถ๋ค.(๋ฌผ๋ก Toolkit์ผ๋ก ใ ใ ใ ใ ใ ใ )
์๋์ด ๊ฐ๋ฐ์์ JS ํ์ฉ
์์ฆ ๋ฃ๊ณ ์๋ ์๋๋ธ๋ก JS ๊ฐ์์์ ์์ฌ๋์ JS ํ์ฉ์ ํ์คํ ๋ญ๊ฐ ๋ค๋ฅด๋ค. ์ฝ๋์ ๋ก์ง๋ ๋ก์ง์ด์ง๋ง, ์ฌ์ฉํ์๋ api๋ ๊ตฌํํด์ ์ฌ์ฉํ์๋ ํจ์๊ฐ ๋ญ๊ฐ ๋๋ ๊น๋ํ๊ณ ์ ์ฝํ๋ค๊ณ ํด์ผํ๋..? 2๊ฐ์ง์ ์์๋ฅผ ๋ค์ด๋ณด๋ฉด
- matches() api ํ์ฉํ๊ธฐ
- ์ ๋ง ๋ณ๊ฑด ์๋์ง๋ง, matches๋ผ๋ api๊ฐ ์ฝ๋๋ฅผ ์ฝ์ ๋ ๋๋ฌด ์ง๊ด์ ์ด๋ผ์ ๋ณด๊ธฐ ์ข์๋ค.
document.querySelector('.btn').addEventListener('click', (e) => {
if (e.target.matches('.btn')) {
// do something
}
})
- ์ฌ๊ท๋ฅผ ํตํด ํน์ ๋ถ๋ชจํ๊ทธ ์ฐพ๊ธฐ
function findElement(startingElement, selector) {
let currentElement = startingElement;
while (currentElement) {
if (currentElement.matches(selector)) {
return currentElement;
}
currentElement = currentElement.parentElement;
}
return null;
}
๊ตฌํํ๋ ค๋ฉด ์ถฉ๋ถํ ๊ตฌํํ ์ ์๊ณ ํ์ฉํ๋ ค๋ฉด ์์์ ํ์ฉํ ์ ์๊ฒ ์ง๋ง, ์๋์ด ๊ฐ๋ฐ์์ ์ฝ๋๋ ๊ทธ ํ๋ฆ์ ๋ณด๋ ๊ฑด ์ ๋ง ๋์ ์์ผ๋ฅผ ์ป๊ฒ ํด์ค๋ค. ์ด๊ฑธ ๊ทธ๋ฅ ๋จธ๋ฆฌ์๋ง ๊ฐ๊ณ ์๋ ๊ฒ ์๋๋ผ ๋ด ์ฝ๋์๋ ๋ น์ฌ๋ด์ ์ฝ๊ธฐ ์ฌ์ด, ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋๋ก ๋ ธ๋ ฅํ ๊ฒ์ด๋ค!!!
๐พ ์ค๋์ ๊ตํ
์ข์ ์ฝ๋๋ฅผ ์์ฃผ ์ ํ๊ณ ์ฝ์ด๋ณด์. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ฝ๋๋ฅผ ์ง์ ํ์ฉํด๋ณด์. ๊ฑฐ๊ธฐ์ ์ป๋ ๋ฐฐ์์ด ์ ๋ง ํฐ ๊ฒ ๊ฐ๋ค.
๐ชต ์ฐธ๊ณ
- ์์