๐TIL
day34
list rendering
- ์ํ์ ์ง : ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ์ ๋ ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ถ ๋ค DOM์ ๋ฐ์ํ์ฌ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์๋ ์ต์ ํ ๊ณผ์ ์ ๊ฑฐ์นจ
- ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ : ํ์ชฝ ๋ฐฉํฅ์์๋ง ๋ฐ์ดํฐ๊ฐ ์ฐ๊ฒฐ๋๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ์ถ๋ ฅํ๋ ๊ฒ๋ง ๊ฐ๋ฅ
- ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ : v-model์ ์ฌ์ฉํ์ฌ ์์ชฝ ๋ฐฉํฅ์์ ๋ฐ์ดํฐ ์ฐ๊ฒฐ
v-for
- v-for : ํด๋นํ๋ ์์๋ฅผ ๋ฐ๋ณตํ์ฌ ๋ฐฐ์ด ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ ์ ์์
- ํ์ฌ ํญ๋ชฉ์ ๋ํ index ๊ฐ์ ๋๋ฒ์งธ ์ธ์๋ก ๋ฐ์ ์ ์์
- v-for๋ฅผ ํตํด ๊ฐ์ฒด ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ณตํ๋ฉด value๊ฐ์ด ์ถ๋ ฅ๋จ
- ๊ฐ์ฒด ์ถ๋ ฅ์ ๋๋ฒ์งธ์ธ์๋ก key, ์ธ๋ฒ์งธ ์ธ์๋ก value๋ฅผ ๋ฐ์ ์ ์์
- ๊ฐ์ฒด๋ฐ์ดํฐ๋ ๋ฐ๋ณต์ key, value์ ์์๋ฅผ ๋ณด์ฅํ ์ ์๊ธฐ ๋๋ฌธ์ index๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์งํฅํ๋ ๊ฒ์ด ์ข์
- v-for์ ์ฌ์ฉํ ๋ ๊ณ ์ ํ key๊ฐ์ ๋ฃ์ด ์ค์ผ ํจ
๋ฐฐ์ด ๋ณ๊ฒฝ ๊ฐ์ง
- ๋ณ์ด ๋ฉ์๋ : Vue๊ฐ ๊ฐ์์ค์ธ ๋ฐฐ์ด์ด ๋ณ์ด๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์์ฑ ์ฒดํฌ๋ฅผ ํตํด ํ๋ฉด์ ๊ฐฑ์ - input์์์ ๋ฐ์ดํฐ ์ ๋ฌ
- ๋น๋ณ์ด ๋ฉ์๋ : ๋ณ์ด๋ฉ์๋๋ ๋ฉ์๋๊ฐ ๋ถ์ ๋ฐฐ์ด์ ์ง์ ์
๋ฐ์ดํธ ์์ผ์ฃผ๋ ๋ฐ๋ฉด ๋น๋ณ์ด ๋ฉ์๋๋ ์ ๋ฐฐ์ด์ ๋ฐํ
- ๋ฐฐ์ด ๊ต์ฒด : vue.js๋ ์๋ก์ด ๋ฐฐ์ด์ด ํ ๋น๋๋๋ผ๋ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ๋ฅผ ํ์
ํด์ ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ๋ ๋๋งํ๊ธฐ ๋๋ฌธ์ ํจ์จ์
components & customEvnet
- components : ์ต์
์ ํตํด ์ปดํฌ๋ํธ๋ก ๋ง๋ค๊ฒ๋๋ฉด ๊ธฐ๋ฅ์ ๋
๋ฆฝ์์ผ ์ฌ์ฌ์ฉ์ฑ์ด ๊ฐ๋ฅํ๋ฉฐ ์ค์ํ ๊ธฐ๋ฅ์ ์บก์ํ์์ผ์ ์ฌ์ฉ ๊ฐ๋ฅ
- ์ปดํฌ๋ํธ ๋ด์์ ์ปค์คํ
ํ ์ด๋ฒคํธ๋ฅผ ๋ง๋ค์ด ๊ทธ๊ฒ์ด ์ปดํฌ๋ํธ์์ ์คํ๋ ๋ ์ด๋ค ๋ฉ์๋๋ฅผ ์ฐ๊ฒฐํ ๊ฒ์ธ์ง ์ง์ ํ ์ ์์ผ๋ฉฐ ์ด๋ฒคํธ์ ํจ๊ป ๋ฐ์ดํฐ๋ ์ ์กํ ์ ์์
- $emit : ์ง์ ํ๋ ๋ฉ์๋์ ์ด๋ฆ๊ณผ ์ค์ ๋ก ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ๋ ์ด๋ฒคํธ์ ์ด๋ฆ๊ณผ ์ผ์น์์ผ์ ๋์์ํด
์ด๋ฒคํธ ํจ๋ค๋ง
- ์ธ๋ผ์ธ ๋ฉ์๋ ํธ๋ค๋ฌ : ๋ฉ์๋ ์ด๋ฆ์ ์ง์ ๋ฐ์ธ๋ฉํ์ง์๊ณ ์ธ๋ผ์ธ JS๊ตฌ๋ฌธ์์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์
- ์ธ๋ผ์ธ ๋ฉ์๋ ํธ๋ค๋ฌ ์ฌ์ฉ์ ์ด๋ฒคํธ ๊ฐ์ฒด๊ฐ ํ์ํ ๊ฒฝ์ฐ ์์์ ์๊ด์์ด $event๋ฅผ ํตํด ๋ฐ์์ฌ ์ ์์
- ๋ณตํฉ ์ด๋ฒคํธ ํธ๋ค๋ฌ : ํ๋์ ์ด๋ฒคํธ์ ์ฌ๋ฌ๊ฐ์ ๋ฉ์๋๋ฅผ ์ ์ ๊ฒฝ์ฐ ์คํ๊ธฐํธ์ธ ()๋ฅผ ๋ถ์ฌ์ฃผ๋ฉฐ ,๋ ;๋ฅผ ํตํด์ ๊ตฌ๋ถํด์ค์ผ ํจ
event/ key ์์์ด
- ์ด๋ฒคํธ ์์์ด : vue.js์์ ์ด๋ฒคํธ ์์์ด๋ก v-on ์ด๋ฒคํธ๋ฅผ ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์์
- stop, prevent, capture, self, once, passive
- passive: ์ด๋ฒคํธ๋ฅผ ํตํด์ ํ๋ฉด์ ๋ ๋๋ง๊ณผ ๋์์ ์ฒ๋ฆฌ๋ฅผ ๋ถ๋ฆฌ์์ผ์ฃผ๋ฉฐ ๋ชจ๋ฐ์ผ ํ๊ฒฝ์์ ์ค์ํ๊ฒ ์ฌ์ฉํ๋ ์ต์
- ํค ์์์ด : vue.js๊ฐ ํค๋ณด๋ ์ด๋ฒคํธ์ ์ ๊ณตํ๋ ์์์ด
- exact : ์ฐ๊ฒฐ๋์ด์ง ํด๋น ์์์ด๋ง ์ธ์งํ์ฌ ๋ฉ์๋ ์คํํ๊ธฐ ๋๋ฌธ์ ์ ํํ ์กฐํฉ์ ์ค์ ํ ์ ์์
- ๋ง์ฐ์ค ๋ฒํผ ์์์ด : left, right, middle
html๋ก ๋ listener๋ฅผ ์ฌ์ฉํ๋ ์ด์
- v-on, @๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฒคํธ ์์์ ์ฐ๊ฒฐ์ ์ป์ ์ ์๋ ์ด์
- HTML ํ
ํ๋ฆฟ์ ๊ฐ๋จํํ์ฌ JS์ฝ๋ ๋ด์์ ํธ๋ค๋ฌ ํจ์ ๊ตฌํ์ ์ฐพ๋ ๊ฒ์ด ๋ ์ฌ์์ง
- ์ด๋ ์ ์ด๊ด๋ฆฌ๊ฐ ์ฌ์์ง๊ธฐ ๋๋ฌธ์ SFC(Single File Components)์์ ํฐ ์ฅ์ ์ผ๋ก ์์ฉ
- JS์์ ์๋์ฐ๊ฒฐ ํ์ง ์๊ณ ์์์ ์ง์ ์์ฑํ๊ธฐ ๋๋ฌธ์ VueModel์ ์์ ๋ก์ง๊ณผ DOM์ ํ์๋กํ์ง ์์
- ViewModel์ด ํ๊ธฐ๋ ๊ฒฝ์ฐ ๋ชจ๋ eventListener๊ฐ ์๋์ผ๋ก ์ ๊ฑฐ
- ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๊ฒฝ์ฐ ๊ทธ์ ๋ฐ๋ฅธ ์ต์ ํ๋ vue์์ ๋ด๋นํ์ฌ ์คํ
๐ํ๋ฃจ๋ฅผ ๋ง์น๋ฉฐ
์ค๋ ๊ฐ์๋ ์ง๋๋ฒ์ ๋ฐฐ์ ๋ v-for์ฌํ๋ ๋ด์ฉ๊ณผ Vue์์ event๋ฅผ ๋ ํ์ฉ๋ ๋๊ฒ ์ฐ๋ ๊ฒ์ ๋ฐฐ์ ๋ค. javascript์์ event๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋ง์ด ์ ํ์ง๋ง passive๋ผ๋ ์ด๋ฒคํธ๋ ์ฒ์ ์๊ฒ๋๋ค. ํ๋ฉด๊ณผ ๋์์ ๋ถ๋ฆฌ์์ผ์ฃผ๋ ์ฌ์ฉ์๋ ์ฐ์ฐ์ด ๋ง์ด ๋๋ ๋ถ๋ถ๋ ์ธ์งํ์ง ์๋๋ก ํ ์ ์๋ค๋ ์ ์ด ์ข๊ฒ ๋๊ปด์ก๋ค. ์ฌ์ค ์ปดํฌ๋ํธ์ custom ์ด๋ฒคํธ ๋ถ๋ถ์ด ์ ์ดํด๊ฐ์ง ์์ ํ๋ฒ ๋ ๊ณต๋ถํ๊ณ ์์ ๋ฅผ ์์ฑํ ์๊ฐ์ด๋ค. ์กฐ๊ธ์ ์ต์ํด์ก๋ค๊ณ ์๊ฐํ๋๋ฐ ์์ง ๋ฐ์ดํฐ์ ์ฌ์ฉ์ด ์ด๋ ต๊ฒ ๋๊ปด์ง๋ค. ๋ ์ ํํ ๊ณต๋ถํด์ผ๊ฒ ๋ค.
๋ด์ผ๋ถํฐ css๋ ํธ์ด๋ด๊ณ vue๊ฐ์์ ๋ชฐ๋ํ ๊ณํ์ด๋ค! ๋ฆ์๋งํผ ๋ ์ด์ฌํ ๊ฐ์๋ฅผ ๋ค์ด์ผ ๊ฒ ๋ฑ