์ ์ Vue๋ฉฐ๋ค์ด๊ฐ๊ณ ์๋ค.
์ฌ๋ฐ๋ค. ์ฝ๋ฉ ๊ณต๋ถ๊ฐ! ์ด๋ฌ๋ฉด ๋ฏธ์น๋ ๊ฐ์ง๋ง ์ง๋ฆฟํด...!
์ค์ง์ ์ธ ๋ฆฌ์คํธ๋ ์ด๋ฒคํธ ๊ตฌํ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ฐฐ์ฐ๋ฉด์ Vue์ ํ์ธต ๋ ๊ฐ๊น์์ง๊ณ ์๋ ๊ฒ ๊ฐ๋ค.
๊ฐ์ด ์ผ๊ทผํ๋ ์ธ์์ด๋ 2์ฐจํ ๊ทธ์ธ ๋ค๋ฅธ ํ๋กฑ์ด๋ถ๋ค๊ณผ๋ ์ ์ ์นํด์ง๊ณ ์๋ค. ๋ค๋ค ๋จผ์ ๋ค๊ฐ์์ฃผ์๊ธฐ๋ ํ๊ณ ๋ด๊ฐ ๋จผ์ ๋ค๊ฐ๊ฐ๊ธฐ๋ ํ๋ค! ์ข์ ํ์์ด๋ค!
v-if
๋๋ ๋ฆฌ๋ธ๋ฅผ ํตํด HTML ์์์ ๋ ๋๋ง ์ฌ๋ถ๋ฅผ ์ ์ดํ ์ ์๋ค.
์ค์ if๋ฌธ ์ฒ๋ผ v-else-if
, v-else
๋ ๊ฐ๋ฅํ๋ฐ ํ ๊ฐ์ง ์ฃผ์ํ ์ ์ด ์๋ค.
์กฐ๊ฑด๋ฌธ์ด ๋ถ์ฌ๋ ์์ ์ฌ์ด์๋ ์กฐ๊ฑด๋ฌธ์ด ๋ถ์ฌ๋์ง ์์ HTML ์์๊ฐ ๋ผ์ด๋ค๋ฉด ์๋๋ค. (๋๋๋น ๋น ...)
<div id="app">
<h1 v-if="isShow">Hello Vue!</h1>
<h2>๋๋๋น ๋น ๋ชป ํ๋ ์ </h2> // ์ด ์์๋ก ์ธํด ์๋์ v-else์ v-else-if๋ ๋์ํ์ง ์๋๋ค.
<h2 v-else-if="0">Application..</h2>
<h2 v-else>Good Morning~</h2>
</div>
<script>
const App = {
data() {
return {
isShow: null,
};
},
};
// ...
</script>
๋ํ ์กฐ๊ฑด๋ถ ๋ ๋๋ง ์ ํ๋์ ์กฐ๊ฑด์ผ๋ก ์ฌ๋ฌ ์์๋ฅผ ๋ฌถ์์ผ๋ก ์ ์ดํ๊ณ ์ถ๋ค๋ฉด ์กฐ๊ฑด๋ฌธ์ด ๋ถ์ฌ๋ ๋ถ๋ชจ์์๋ก ๊ฐ์ธ์ผ ํ๋ค.
<div id="app">
<h1 v-if="isShow">Hello Vue!</h1>
// ์ด๋ ๊ฒ div๋ก h2, p, span ํ๊ทธ๋ฅผ ๋ฌถ์ด์ ์ ์ดํ ์ ์๋ค.
<div v-else-if="[]">
<h2>Application..</h2>
<p>1234</p>
<span>985</span>
</div>
<h2 v-else>Good Morning~</h2>
</div>
<script>
const App = {
data() {
return {
isShow: null,
};
},
};
const vm = Vue.createApp(App).mount('#app');
</script>
ํ์ง๋ง ์ด๋ ๊ฒ ๊ทธ๋ฅ div
ํ๊ทธ์ ๊ฐ์ด ๊ธฐ์กด ํ๊ทธ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ ๋๋ง ์ ํด๋น ์์๊ฐ ๋จ์์๊ฒ ๋๋ค. ์ด๊ฒ์ ์๋ํ๋ค๋ฉด ์๊ด์์ง๋ง ์จ๊ธฐ๊ณ ์ถ๋ค๋ฉด template
ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
<div id="app">
<h1 v-if="isShow">Hello Vue!</h1>
// template ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๋๋ง๋์ง ์๋๋ค.
<template v-else-if="[]">
<h2>Application..</h2>
<p>1234</p>
<span>985</span>
</template>
<h2 v-else>Good Morning~</h2>
</div>
๊ฐ์๋ณด์ด์ง๋ง ๋ค๋ฅธ v-if
์ v-show
๋๋ ํฐ๋ธ๋ฅผ ์์๋ณด์.
๋ ๋๋ ํฐ๋ธ ๋ชจ๋ HTML ์์๋ฅผ ์ฌ์ฉ์ UX์ ์ธ ๊ด์ ์์ ์กฐ๊ฑด๋ถ๋ก ๋ณด์ฌ์ฃผ๋ ์ฌ๋ถ๋ฅผ ์ ์ดํ๋ ๋๋ ํฐ๋ธ์ด๋ค.
ํ์ง๋ง v-if
๋ lazy, ๊ฒ์๋ฌ์ ์กฐ๊ฑด์ด ๋ง์กฑํ์ง ์์ผ๋ฉด ๋ ๋๋ง์กฐ์ฐจ ํ์ง ์๋๋ค.
์ด์ ๋ฐํด v-show
๋ ์ผ๋จ ๋ ๋๋ง์ ํ๋ ์กฐ๊ฑด์ด ๋ง์กฑํ์ง ์์ผ๋ฉด
ํด๋น HTML ์์์ display: none;
css ์์ฑ์ ์ถ๊ฐํด์ ์จ๊ธฐ๊ฒ ๋ง๋ ๋ค.
๋ฐ๋ผ์ v-if
๋ ์ด๊ธฐ ๋ ๋๋ง ๋น์ฉ์ด ๋ฎ์ง๋ง ํ ๊ธ๊ณผ ๊ฐ์ ์ ํ ๋น์ฉ์ด ๋๊ณ ,
๋ฐ๋๋ก v-show
๋ ์ด๊ธฐ ๋ ๋๋ง ๋น์ฉ์ ๋์ง๋ง ์ ํ ๋น์ฉ์ด ๋ฎ์ผ๋ฏ๋ก ์ฅ๋จ์ ์ด ์๋ฐ๋๋ค.
์ด๋ค ๊ฑธ ๋ฌด์กฐ๊ฑด ์ฌ์ฉํด๋ผ ์ด๋ฐ ๊ฒ์ ์๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ผ๋ก๋ ์ด๊ธฐ ๋ ๋๋ง ๋น์ฉ์ ๋ฎ์ถ๋ ๊ฒ์ด ์ข๊ธฐ์ v-if
๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ์ง๋ง ํ ๊ธ๋ก ์ธํ ์์ ๋ ๋๋ง ์ ํ ํจ๊ณผ๊ฐ ๋ง์ ์นํ์ด์ง์ผ ๊ฒฝ์ฐ์๋ v-show
๋ฅผ ๋์
ํ๋ ๊ฒ์ด ์ข๋ค. ๋ญ๋ ์ํฉ์ ๋ง๊ฒ ์ฌ์ฉํ๋ฉด ๋๋ค.
v-show
๋ v-cloak
๊ณผ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋คv-show
๋๋ ํฐ๋ธ์ ๋ ๋ค๋ฅธ ์น๋ช
์ ์ธ(?) ๋จ์ ์ด ์๋ค. ์ผ๋จ ๋ ๋๋ง์ ๋๋ ํน์ฑ ๋๋ฌธ์ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง ๋ฐฉ์์ ์นํ์ด์ง์์ ์๋์ ๊ฐ์ ์ฝ๋์์ {{ msg }}
์ msg
๋ฐ์ดํฐ๊ฐ ์๋ฒ๋ก๋ถํฐ ๋ถ๋ฌ์์ง์ง ์์ผ๋ฉด ํด๋น ์ด์ค ์ค๊ดํธ ๊ตฌ๋ฌธ์ด ๊ทธ๋๋ก ๋
ธ์ถ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์ ์๋ค.v-cloak
๋๋ ํฐ๋ธ์ css๋ก [v-cloak]
์ ํ์๋ฅผ ํตํด ํด๋น ๋๋ ํฐ๋ธ๋ฅผ ๊ฐ์ง๊ณ ์๋ ์์์ ๋ํด์ display: none;
์ ์ ์ฉํด์ค๋ค.v-show
๋๋ ํฐ๋ธ ์์ ์์ ๋ด ๋ฐ์ดํฐ๊ฐ ๋ถ๋ฌ์์ง๊ธฐ ์ ๊น์ง v-cloak
์ด ๋ถ์ฌ๋์ด์ ์จ๊ฒจ์ ธ ์๋ค๊ฐ ๋ฐ์ดํฐ๊ฐ ๋ฐ์ธ๋ฉ๋จ๊ณผ ๋์์ ๋ค์ ๋ณด์ฌ์ง๊ฒ ๋๋ค.<style>
[v-cloak] {
display: none;
}
</style>
<div id="app">
<button @click="toggle">Toggle!</button>
<h1 v-show="isShow" v-cloak>{{ msg }}</h1>
</div>
React์์๋ ๋ฐ๋ณต๋ฌธ์ ํตํด li
ํ๊ทธ๋ฅผ ์์ฑํ ๋ ๊ฐ๊ฐ์ ์์์ ๊ณ ์ ํ id๋ฅผ ์ ๊ณตํด์ผ ํ๋ค. ์ด๋ ๊ฐ๋ฐ์๋ฅผ ์ํ ๊ฒ์ด ์๋ React๊ฐ ๊ฐ ์์๋ฅผ ๊ตฌ๋ณํ๊ธฐ ์ํด์์ด๋ค. (๋ ์ข์ผ๋ผ๊ณ id ๋ถ์ด๋ผ๋๊ฑฐ ์๋์ผ~)
Vue์์๋ ๋ง์ฐฌ๊ฐ์ง์๋ค.
์๋ ์ฝ๋๋ todo ๋ฆฌ์คํธ๋ฅผ ๋ง๋๋ ์์์ด๋ค.
todos
๋ฐฐ์ด์ ์๋ ๋ฐ์ดํฐ๋ค์ ๋ฆฌ์คํธ ํํ๋ก ์ถ๋ ฅํ๊ธฐ ์ํด
v-for
๋๋ ํฐ๋ธ๋ก ๊ฐ๊ฐ์ todo
๋ฐ์ดํฐ๋ค์ ์ถ์ถํ์ฌ ์์ฑํ๋ค.
<ul>
<li
v-for="todo in todos"
:key="todo.id">
{{ todo.title }}
</li>
</ul>
์ด ๋ :key
๋ฅผ todo.id
๋ฐ์ดํฐ๋ก ๋ฐ์ธ๋ฉํ์ฌ ๊ณ ์ ํ id๋ฅผ ์ ๊ณตํด์ฃผ์ด์ผ Vue๊ฐ ๊ฐ๊ฐ์ todo li
์์๋ค์ ์๋ณํ๊ณ ๊ด๋ฆฌํ ์ ์๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ v-for
๋๋ ํฐ๋ธ๋ฅผ ์ฌ์ฉํด์ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์ ์์๋ฅผ ๋ฐ๋ก ์์ฑํ ๋๋ :key
๋ฅผ ํตํด id๋ฅผ ๊ผญ ๋ฐ์ธ๋ฉํด์ฃผ๋ ๊ฒ์ ์ต๊ดํํด์ผ ํ๋ค.
๋ ์ด ๋๊น์ง addEventListener
์๋ ์ธ์๊ฐ ๋ ๊ฐ๋ฟ์ธ ์ค ์์๋ค.(๊ณต์๋ฌธ์ ๊ผผ๊ผผํ ์ฝ์..)
์๋ ์ฝ๋์ ๊ฐ์ด ์ด๋ฒคํธ๋ช
, ์ฝ๋ฐฑํจ์๋ง ์ฌ์ฉํด์์๊ณ ๊ทธ๋ฐ์ค๋ง ์์๋ค.
window.addEventListener('click', () => {})
ํ์ง๋ง MDN ๊ณต์๋ฌธ์๋ฅผ ์ฐพ์๋ณด๋ ๋กํ๋ ์ธ ๋ฒ์งธ ์ต์
์ธ์์ Capture ์ค์ ํ ์ ์๋ค๋ ๋ด์ฉ์ด ์์๋ค.
์ด๋ฒ Vue ๊ฐ์์์ capture ์ด๋ฒคํธ ์์์ด๋ฅผ ๋ฐฐ์ฐ๋ฉด์ ๋ค์๊ธ ์์๋ค.
Capture ์ต์
์ ์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ ๋ฐฉ์งํ๊ธฐ ์ํ JS์์์ stopPropagation()
๋ฉ์๋๋ Vue์์์ stop
์ด๋ฒคํธ ์์์ด์๋ ๋ฐ๋์ ์ญํ ์ ์ํํ๋ค.
๋ง ๊ทธ๋๋ก ์ต์์ ์์์์๋ถํฐ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ํ๊ฒ๊น์ง ์ด๋ฒคํธ๊ฐ ์ ๋ฌ๋ ๋ capture ์ต์ ์ด ์ง์ ๋ ์ด๋ฒคํธ์ ๋ํด์ ์บก์ณํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
์๋ ์ฝ๋์์๋ child
ํด๋์ค์ div
๋ stop
์์์ด๋ฅผ ํตํด ์์ ์์๋ก์ ์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ ๋ง์๊ณ
parent
ํด๋์ค div
๋ capture
์์์ด๋ฅผ ํตํด child
ํด๋์ค div
๋ฅผ ํด๋ฆญํ์ ๋ window๊ฐ์ฒด -> parent -> child ์์ผ๋ก ์ ๋ฌ๋์ด ๋ด๋ ค์ค๋ ์ค๊ฐ์ ์ด๋ฒคํธ๊ฐ ์บก์ณ๋๋ค.
๋ฐ๋ผ์ child
ํด๋์ค div
๋ฅผ ํด๋ฆญํ๋ฉด ์บก์ณ๋ parent
ํด๋์ค div
์ ํด๋ฆญ ์ด๋ฒคํธ๊ฐ ๋จผ์ ์ถ๋ ฅ๋๊ณ ์ดํ์ child
ํด๋์ค div
์ ํด๋ฆญ ์ด๋ฒคํธ๊ฐ ์ถ๋ ฅ๋ ํ์ ์ดํ ์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ ์ผ์ด๋์ง ์๋๋ค.
<div id="app">
<div class="parent" @click.capture="log">
<div class="child" @click.stop="log"></div>
</div>
</div>
<script>
const App = {
methods: {
log(event) {
console.log(event.currentTarget);
},
},
};
// ...
</script>
์์ ์์์์ ํน์ ์ด๋ฒคํธ๋ฅผ ์ถ์ถํด์์ผ ํ๋ ์ํฉ์ด ๋๋ฌผ๊ฒ ์ง๋ง ํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ฐ๋์ ์์ํ ๋ ์ด๋ฒ ๊ธฐํ์ ์๊ฒ๋์ด ์ข์๋ค.
passive ๋ํ capture์ ๊ฐ์ด addEventListener
์ ์ธ ๋ฒ์งธ ์ต์
์ค ํ๋์๋ค.
passive ์์์ด๋ฅผ ์ด๋ฒคํธ์ ๋ถ์ฌํ๋ฉด ํ๋ฉด์ ๋ ๋๋ง๊ณผ ์ด๋ฒคํธ ๋ด๋ถ ๋ก์ง์ ๋์์ ๋ถ๋ฆฌํ ์ ์๊ฒ ๋ง๋ค์ด ์ค๋ค.
์๋๋ ๋ถ๋ชจ์ ์๊ธด ์คํฌ๋กค์ wheel ์ด๋ฒคํธ๋ฅผ ์ถ๊ฐํ๊ณ ๊ฑฐ๊ธฐ์ passive ์์์ด๋ฅผ ์ถ๊ฐํ ์ฝ๋์ด๋ค.
์ด๋ ๊ฒ ๋๋ฉด ์ด๋ฒคํธ์ ์ฝ๋ฐฑ ํจ์ log
์ ๋์๊ณผ ๋ธ๋ผ์ฐ์ ์์ ์คํฌ๋กค์ ๋ด๋ฆฌ๋ ๋์์ ๋ณ๊ฐ๋ก ์งํ๋๋ค. ์ค์ ๋ก log
ํจ์๋ก ์ธํด i
๊ฐ 1~100๊น์ง ์ถ๋ ฅ๋์ง๋ง ๋ฒ๋ฒ
๋์ง ์๊ณ ์คํฌ๋กค์ ๋งค๋๋ฝ๊ฒ ๊ตฌํ๋๋ค.
<div id="app">
<div class="parent" @wheel.passive="log">
<div v-for="n in 15" class="child">{{ n }}</div>
</div>
</div>
<script>
const App = {
methods: {
log() {
for (let i = 0; i < 100; i += 1) {
console.log(i);
}
},
},
};
const vm = Vue.createApp(App).mount('#app');
</script>
์ด์ค ์ค๊ดํธ ๊ตฌ๋ฌธ์ผ๋ก๋ data๋ฅผ HTML ์์์ ๋ ๋๋งํ์ฌ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ๋ฐ์ ๋์ง ์๋๋ค.
๋ธ๋ผ์ฐ์ ์์ input, select ํ๊ทธ๋ input ํ๊ทธ ์์์ radio, checkbox type๋ค์ ํตํด์ ์ฌ์ฉ์๊ฐ ์ ๋ ฅ ๋ฐ ์ ํํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์๋ฐฉํฅ์ผ๋ก ์ฐ๋์ํฌ ํ์์ฑ์ด ์๋ค.
์ด ๋ v-bind
์ @
์ด๋ฒคํธ๋ฅผ ํตํด ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ๊ตฌํํ ์๋ ์์ง๋ง ์ฝ๋๊ฐ ๊ธธ์ด์ง๋ค.
์ด๊ฒ์ ๋ทฐ์์๋ v-model
๋ก ์์ถํ์ฌ ๊ฐ๋ฅํ๋ค!!
<div id="app">
<input v-model="msg" />
<h1>{{ msg }}</h1>
</div>
<script>
const App = {
data() {
return {
msg: 'Hello Vue!',
};
},
};
// ...
</script>
์์ฃผ ๊ธฐ๋ณธ์ ์ธ v-model
ํ์ฉ ์ฝ๋์ด๋ค.
input
ํ๊ทธ์ ์
๋ ฅํ msg
๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก h1
ํ๊ทธ์ ์ด์ค ์ค๊ดํธ๋ฌธ์ ํตํด ์ฐ๋ํด์ ์ฆ๊ฐ์ ์ผ๋ก ๋ ๋๋ง์ด ๋๋ค.
v-model
์ ํ๊ทธ ์ข
๋ฅ๋ type ์ข
๋ฅ์ ๋ฐ๋ผ ์ ์ฉํ ์ ์๋ ์์์ด๊ฐ ๋ง์ด ์กด์ฌํ๋ค. ๊ฐ๊ฐ์ ๊ฒฝ์ฐ์ ์ ์ฉํด์ฃผ์ด์ผ ํ๋ ์์์ด๊ฐ ๋๋ฆ ์ ํด์ ธ ์๋๋ฐ ์ด๊ฑด ๊ทธ๋ ๊ทธ๋ ์ฐพ์๋ณด๋ฉด์ ์ ์ฉํ๋ฉด์ ์ตํ๋ ๋ ๋ฏ ํ๋ค.
์ค์ํ ๊ฒ์ ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์งง๊ฒ ๋ฑ! ํ ์ ์๋ค๋ ๊ฒ!
์ค๋์ ์ง์ญ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ๋ ๋๋ต์ ์ผ๋ก ๋ฐฐ์ ๋ค.
๊ทธ ์ค ์ปดํฌ๋ํธ ๋ด์ธ๋ถ์์ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ณด๋ด๊ณ ๋ค์ฌ๋ฃ๋ ๋ฐฉ๋ฒ์ด ์๋ก ๋ค๋ฅธ ์ ์ด ์ค์ํ๋ค.
์ปดํฌ๋ํธ ์ธ๋ถ์์ ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํด์ ์ฐ๊ธฐ ์ํด์๋ React์์์ ๋์ผํ๊ฒ props ์์ฑ์ ์ด์ฉํ๋ค.
์๋ ์ฝ๋์์๋ upper-name
์ง์ญ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌํํ ๊ฒ์ด๋ค.
<div id="app">
<upper-name
v-for="fruit in fruits"
:key="fruit.id"
:name="fruit.name"
@to-upper="toUpper(fruit, $event)"
></upper-name>
</div>
<script>
// ...
app.component('upper-name', {
template: `
<div @click="capitalize">{{ name }}</div>
`,
props: ['name'],
methods: {
capitalize() {
// this.name = this.name.toUpperCase();
this.$emit('to-upper', this.name.toUpperCase());
},
},
});
// ...
</script>
component ์ธ๋ถ ๋ฐ์ดํฐ์ธ fruit.name
์ name
์ด๋ props๋ก ์ ๋ฌ๋ฐ๋๋ค.
component ๋ด์์ props ์์ฑ์ ํตํด ๋ฐฐ์ด ์ ์์์ ์ด๋ฆ์ ์์ ๋กญ๊ฒ ์ค์ ํ๊ณ
HTML ์ component์์ ํด๋น ์ด๋ฆ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ธ๋ฉํด์ฃผ๋ฉด ๋๋ค.
๋ฐ๋๋ก component ๋ด๋ถ์์ ๋๋ฌธ์๋ก ๋ฐ๊พผ this.name.toUpperCase()
๋ฐ์ดํฐ๋ฅผ ์ธ๋ถ๋ก ๋ด๋ณด๋ด๊ธฐ ์ํด์๋ $emit
์ ์ฌ์ฉํด์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ์ปค์คํ
์ด๋ฒคํธ ์ด๋ฆ, ๋ ๋ฒ์งธ ์ธ์๋ก ๋ด๋ณด๋ผ ๋ฐ์ดํฐ๋ฅผ ์ง์ ํ๋ฉด ๋๋ค.
๋์์ HTML์ component์์ @
๋ฅผ ํตํด ์ปค์คํ
์ด๋ฒคํธ๋ฅผ ์ง์ ํ ๋ค ๋๊ฒจ์ค ๋ฉ์๋์ ์ธ์๋ก $event
๋ก ๋๊ฒจ์ฃผ๋ฉด ๋๋ค!
๋ค์ ๋ณต์กํ์ง๋ง ์ปดํฌ๋ํธ๊ฐ ๋ฐ์ดํฐ ์ฐธ์กฐ ๋ฐฉ์์ ํ์์ ์ผ๋ก ์๊ณ ์์ด์ผ ์ดํ ์ปดํฌ๋ํธ ๊ตฌ์กฐ๋ก ํ๋ก์ ํธ๋ฅผ ๊ตฌํํ ๋ ์์ ์์ฌ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์๊ธฐ์ ์ ์์๋ฌ์ผ๊ฒ ๋ค.
https://www.youtube.com/watch?v=24_iVKNWy2E
์ด ์์ ๊ฐ์์์์ฒ๋ผ ์ธํธ๋ผ ๋ฌ๋์ ํ๋ ค๊ณ ํญ์ ๋
ธ๋ ฅ ์ค์ด๋ค.
์๊ฐ๋ณด๋ค ์ด๋๊น์ง TIL๋ฅผ ์์ฑํ๊ณ ๊ณ์ ์ฃผ๋์ ์ผ๋ก ์ฐพ์๋ณด๊ณ ํ๋ ๊ฒ์ด ์ด๋ฏธ ๋ด๊ฐ ์ธํธ๋ผ ๋ฌ๋์ค๋ฌ์ด ํ์ต์ ํ๊ณ ์๋ ๊ฒ์ด์๋ค! ์ฝ๋ฉ ๊ณต๋ถ๋ ๋์ด์ด๋ค!! ๊ทธ๋ ๊ฒ ์๊ฐํ๊ณ ๊ฐ๋ณด์๊ณ !
๊ทธ๋งํผ ๊ฑด๊ฐ ๊ด๋ฆฌ๊ฐ ์ค์ํ๋ค. ์ค๋ ์์นจ์๋ ์ปจ๋์ ์ด ์ ์ข์์ ๋ง๊ฒ์ ๋ง์๋ค. ์ธํธ๋ผ ๋ฌ๋๋ ๋ชธ์ด ๋์ผ ํ์ง.. ์ ์ ์ค์ด์ง ๋ง๊ณ ๋ ๋ ์์ ๋ ์ต๋ํ ํจ์จ์ ๋ณด์!
Vue๋ฅผ ๋ฐฐ์ฐ๋ฉด์ ์ ์ง์ฌ์ ธ ์๋ ํ๋ ์์ํฌ๋ผ๋ ๋๋์ ๊ณ์ ๋ฐ๋๋ค. ๋์ธ๋ React์ด์ง๋ง ์ด๋ค๋ฉด์์๋ Vue๋ก ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ ๊ธฐ๋ฅ๋ค๋ ๋ง์ ๊ฒ ๊ฐ๋ค. Vue๋ก ํ ์ด ํ๋ก์ ํธ ๊ผญ ํด๋ด์ผ๊ฒ ๋ค.
๐ ํด๋น ๋ด์ฉ์ ๊ณต๋ถํ๋ฉด์ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. ํ๋ฆฐ ๋ถ๋ถ์ด๋ ์คํดํ๊ณ ์๋ ๋ถ๋ถ์ด ์๋ค๋ฉด ํผ๋๋ฐฑ ๋ถํ๋๋ฆฝ๋๋ค.