Vue μΈμ€ν΄μ€
new Vue({
el:,
template:,
data: ,
methods: ,
created: ,
watch: ,
});
- el: μΈμ€ν΄μ€κ° κ·Έλ €μ§λ νλ©΄μ μμμ
- template: νλ©΄μ νμν μμ
- data: λ°μ΄ν°
- methods: μ΄λ²€νΈ ν¨μλ€
- created: λΌμ΄νμ¬μ΄ν΄ μ€ νλ
- watch: dataμμ μ μν μμ±μ΄ λ³κ²½λμ λ μΆκ° λμμ μ μ
- computed: λ°μ΄ν°λ₯Ό κ³μ°ν κ²°κ³Όλ₯Ό μμ±μΌλ‘ μ¬μ©νκΈ° μν΄ μ¬μ©
methods ν¨μμ μ₯μ
computed
- λ°μ΄ν°μ κ°μ λ°λΌμ λ°λλ κ°μ μ μνλ μμ±μ΄λ€.
- ν
νλ¦Ώ λ΄μ ννμμ λ£μ μ μλ€. νμ§λ§ κ°λ¨ν μ°μ°μΌ λλ§ μ΄μ©νλ κ²μ΄ μ’λ€.
μ΄λ κ² μ°μ°μμ΄ λ³΅μ‘νλ€λ©΄? μ΄λ₯Ό μν΄ computed μμ±μ΄ μ‘΄μ¬νλ€.<div id="example"> {{ message.split('').reverse().join('') }} </div>
<div id="example">
<p>μλ³Έ λ©μμ§: "{{ message }}"</p>
<p>μμμΌλ‘ νμν λ©μμ§: "{{ reversedMessage }}"</p>
</div>
var vm = new Vue({
el: '#example',
data: {
message: 'μλ
νμΈμ'
},
computed: {
// κ³μ°λ getter
reversedMessage: function () {
// `this` λ vm μΈμ€ν΄μ€λ₯Ό κ°λ¦¬ν΅λλ€.
return this.message.split('').reverse().join('')
}
}
})
watch
λλΆλΆμ κ²½μ° computed μμ±μ΄ λ μ ν©νμ§λ§ μ¬μ©μκ° λ§λ κ°μμκ° νμν κ²½μ°κ° μλ€. κ·Έλμ Vueλ watch μ΅μ μ ν΅ν΄ λ°μ΄ν° λ³κ²½μ λ°μνλ λ³΄λ€ μΌλ°μ μΈ λ°©λ²μ μ 곡νλ€. μ΄λ λ°μ΄ν° λ³κ²½μ λν μλ΅μΌλ‘ λΉλκΈ°μ λλ μκ°μ΄ λ§μ΄ μμλλ μ‘°μμ μννλ €λ κ²½μ°μ κ°μ₯ μ μ©νλ€.
//template
<div id="watch-example">
<p>
yes/no μ§λ¬Έμ λ¬Όμ΄λ³΄μΈμ:
<input v-model="question">
</p>
<p>{{ answer }}</p>
</div>
//script
var watchExampleVM = new Vue({
el: '#watch-example',
data: {
question: '',
answer: 'μ§λ¬Έμ νκΈ° μ κΉμ§λ λλ΅ν μ μμ΅λλ€.'
},
watch: {
// μ§λ¬Έμ΄ λ³κ²½λ λ λ§λ€ μ΄ κΈ°λ₯μ΄ μ€νλ©λλ€.
question: function (newQuestion) {
this.answer = 'μ
λ ₯μ κΈ°λ€λ¦¬λ μ€...'
this.debouncedGetAnswer()
}
}
})
computed VS watch
- computed : μ μΈν νλ‘κ·Έλλ° λ°©μ
- κ³μ°λ κ°μ μΆλ ₯νκΈ°μν¨μ΄λ€.
- watch : λͺ
λ Ήν νλ‘κ·Έλλ° λ°©μ
- μ΄λ€ μ‘°κ±΄μ΄ λμμλ ν¨μλ₯Ό μ€νμν€κΈ° μν¨μ΄λ€.
- λ°μ΄ν°λ₯Ό κ°μν΄μ κ°μ΄ λ³νν λλ§λ€ μ μν ν¨μκ° μ€νλλ€.
- λ°μ΄ν° λ³κ²½μ μλ΅μΌλ‘ λΉλκΈ°μ κ³μ°μ΄ νμν κ²½μ°λ μκ°μ΄ λ§μ΄ μμλλ κ³μ°μ ν΄μΌ ν λ μ¬μ©νλ κ²μ΄ μ’λ€.
보ν΅μ λͺ λ Ήν νλ‘κ·Έλλ°μΈ watch 보λ€λ μ μΈν νλ‘κ·Έλλ°μΈ computedλ₯Ό μ¬μ©νλ κ²μ΄ λ μ’λ€.
watchλ₯Ό μ¬μ©νλ©΄, APIλ‘€ νΈμΆνκ³ κ·Έ κ²°κ³Όμ λν μλ΅μ λ°κΈ° μ κΉμ§ μ€κ° μνλ₯Ό μ€μ ν μμμ΅λλ€. computedλ₯Ό μ¬μ©νλ©΄ API νΈμΆ κ²°κ³Όλ₯Ό κΈ°λ€λ¦¬λ λμμ μ€κ° μνμ μ€μ ν μ μμ΅λλ€.
computed VS method
computedμ methodsμ μ°¨μ΄μ μ μΊμ± μ¬λΆμ΄λ€. computedμμ±μ λ΄λΆμ μΌλ‘ λ°μ΄ν°λ₯Ό μΊμ±νκ³ μλ€. methodsλ λ§€λ² μλ‘ νΈμΆν΄μ κ³μ°νλ€.
computedλ μ’
μ λμμ΄ λ³κ²½ λ λλ§ ν¨μλ₯Ό νΈμΆνλ€.. message κ°μ΄ λ³νμ§ μλ ν reversedMessageλ₯Ό μ¬λ¬λ² νΈμΆνμ¬λ λ€μ κ³μ°νμ§ μκ³ μΊμ±ν κ²°κ³Όλ₯Ό μ¦μ λ°ννλ€.
μκ°μ΄ λ§μ΄ 걸리λ κ³μ°μ ν λ, computedμ μ¬μ©νλ©΄ λ μ’μ ν¨μ¨μ μ΄ν리μΌμ΄μ
μ λ§λ€ μ μλ€.
μΊμ±μ νμ§ μκ³ , νΈμΆ ν λλ§λ€ μλ‘κ² κ³μ°μ ν΄μΌ νλ κ²½μ°μλ methodsλ₯Ό μ¬μ©ν΄μΌ νλ€.
μ»΄ν¬λνΈ
νλ©΄μ μμμ μΌμ ν λ¨μλ‘ μͺΌκ°μ΄ μ¬νμ© κ°λ₯ν ννλ‘ κ΄λ¦¬νλ κ²μ΄λ€.
μ μλ±λ‘
Vue.component('my-component-name', { /* ... */ })
λ₯Ό μ΄μ©ν΄μ μ»΄ν¬λνΈλ₯Ό μ μμΌλ‘ λ±λ‘νλ€.
μ»΄ν¬λνΈμ μ΄λ¦μ 첫 λ²μ§Έ μΈμλ‘ λ€μ΄κ°λλ°, μΌλ°₯νκΈ°λ² μΌλ‘ μμ±νλ κ²μ κΆμ₯νλ€.MyComponentName
μ²λΌ νμ€μΉΌνκΈ°λ²μΌλ‘λ ν μ μμ§λ§, DOMμ λ°λ‘ μΈ λλ μΌλ°₯-νκΈ°λ² μ΄λ¦λ§ κ°λ₯νκΈ° λλ¬Έμ κ΅³μ΄ μΈ μ΄μ λ μλ€.
// μ¬μ©
<div id="app">
<component-a></component-a>
<component-b></component-b>
<component-c></component-c>
</div>
// λ±λ‘
Vue.component('μ»΄ν¬λνΈμ΄λ¦', μ»΄ν¬λνΈ λ΄μ©);
Vue.component('component-a', { /* ... */ })
Vue.component('component-b', { /* ... */ })
Vue.component('component-c', { /* ... */ })
new Vue({ el: '#app' })
μ΄λ κ² μ μλ±λ‘ν μ»΄ν¬λνΈλ μ΄λ€ λ£¨νΈ VueμΈμ€ν΄μ€ μμλ μ¬μ©ν μ μλ€.
μ§μλ±λ‘
μ μλ±λ‘μ λ¨μ μ΄ μλ€. μ¬μ©νμ§ μλ μ»΄ν¬λνΈλ μ΅μ’ λΉλμ ν¬ν¨λλ κ²μ΄λ€. λΆνμνκ² μ½λ μμ΄ μ»€μ§λ€.
μ΄ κ²½μ°μ μ»΄ν¬λνΈλ₯Ό μΌλ° μλ°μ€ν¬λ¦½νΈ κ°μ²΄λ‘ μ μν μ μλ€.const ComponentA = { /* ... */ }
μ¬μ©ν λλ components μ΅μ μ ν΅ν΄ μΈ μ μλ€.
new Vue({
el: '#app',
components: {
'component-a': ComponentA,
'component-b': ComponentB
}
})
componentsκ°μ²΄μ κ° μμ±μμ ν€κ° μ리먼νΈμ μ΄λ¦μ΄ λκ³ valueμ μ»΄ν¬λνΈ κ°μ²΄λ₯Ό μ§μ νλ©΄ λλ€.
μ§μ λ±λ‘λ μ»΄ν¬λνΈλ λΉμ°ν νμ μ»΄ν¬λνΈμμλ μ¬μ©μ΄ λΆκ°λ₯νλ€.
μ»΄ν¬λνΈ ν΅μ
μ»΄ν¬λνΈλ§λ€ κ΄κ³κ° μμ±λλ©° μΈμ€ν΄μ€μ data
λ root
μ»΄ν¬λνΈμμ κ΄λ¦¬νλ
data λ₯Ό λ΄λ¦¬κ³ , μ¬λ¦¬κ³ ν΄μΌνλ€.
props :
μμ μ»΄ν¬λνΈμ μ 보λ₯Ό νμ μ»΄ν¬λνΈλ‘ μ λ¬νκΈ° μν νΉμ±μ΄λ€.
νμ μ»΄ν¬λνΈλprops μ΅μ
μ μ¬μ©νμ¬ μμ ν κ²μΌλ‘ κΈ°λλλ propsλ₯Ό λͺ
μμ μΌλ‘ μ μΈν΄μΌνλ€.
HTML νκ·Έμμλ μΌλ°₯μΌμ΄μ€
javascript props() μμλ μΉ΄λ©μΌμ΄μ€λ‘ μμ±ν΄μΌνλ€.
λ¬Έλ²v-bind:νλ‘μ€ μμ± μ΄λ¦="μμ μ»΄ν¬λνΈμ λ°μ΄ν° μ΄λ¦"
$.emit() : νμ μ»΄ν¬ν΄νΈμμ μμ μ»΄ν¬λνΈλ‘ 보λ΄λ κ²μ΄λ€.
! μ£Όμ : camel νκΈ°λ² μ¬μ©νλ©΄ μλλ€. kebab νκΈ°λ² μ¬μ©ν΄μΌνλ€.
λ¬Έλ²v-on:νμμ»΄ν¬λνΈμμ λ°μν event μ΄λ¦="μμ μ»΄ν¬λνΈμ method μ΄λ¦"
κ°μ λ 벨μμ μ»΄ν¬λνΈ ν΅μ λ°©λ²
Root μ»΄ν¬λνΈλ‘ μ λ¬νλ€κ° λ΄λ €μ€μΌνλ€.
emit κ³Ό props() λμ μ¬μ©
μ°Έμ‘°
'Vue.js' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Vue.js] Chart.js λμ λ§λ κ·Έλν μ΄ν© νμνκΈ° (Stack Bar, Total) (1) | 2022.10.25 |
---|---|
[Vue.js] Hot Reload λμ μν λ (0) | 2022.10.18 |
Vue.js(4) Router λ° Axios, async await κ°λ (1) | 2022.10.09 |
Vue.js(2) vue μΈμ€ν΄μ€ λ° ν νλ¦Ώ λ¬Έλ² (0) | 2022.10.09 |
Vue.js(1) νλ‘μ νΈ μμ± λ° νλ‘μ νΈ κ΅¬μ± (0) | 2022.10.09 |
λκΈ