# λ―Ήμ€μΈ
λ―Ήμ€μΈ(Mixins)μ μ¬λ¬ μ»΄ν¬λνΈ κ°μ 곡ν΅μΌλ‘ μ¬μ©νκ³ μλ λ‘μ§, κΈ°λ₯λ€μ μ¬μ¬μ©νλ λ°©λ²μ λλ€. λ―Ήμ€μΈμ μ μν μ μλ μ¬μ¬μ© λ‘μ§μ data, methods, created λ±κ³Ό κ°μ μ»΄ν¬λνΈ μ΅μ μ λλ€.
# λ―Ήμ€μΈ μ½λ νμ
λ―Ήμ€μΈ λ¬Έλ²μ μλμ κ°μ΅λλ€.
var HelloMixins = {
// μ»΄ν¬λνΈ μ΅μ
(data, methods, created λ±)
};
new Vue({
mixins: [HelloMixins]
})
μμ κ°μ΄ λ―Ήμ€μΈμ μ£Όμ
ν μ»΄ν¬λνΈμ mixins
μμ±μ μ μΈνκ³ λ°°μ΄ []
μμ μ£Όμ
ν λ―Ήμ€μΈλ€μ μΆκ°ν©λλ€.
# λ―Ήμ€μΈ μ¬μ© μμ
κ·ΈλΌ μ€μ λ‘ μμ λ²ν λ―Ήμ€μΈ μ½λ μμλ₯Ό λ³΄κ² μ΅λλ€. μΉ μ ν리μΌμ΄μ μ ꡬνν λ λ§μ΄ μ¬μ©λλ λ€μ΄μΌλ‘κ·Έ(λͺ¨λ¬ νΉμ νμ μ°½)μ μ΄κΈ°, λ«κΈ° λ‘μ§μ λ―Ήμ€μΈμ μ μνμ΅λλ€.
var DialogMixin = {
data() {
return {
dialog: false
}
},
methods: {
showDialog() {
this.dialog = true;
},
closeDialog() {
this.dialog = false;
}
}
};
DialogMixin
μλ λ€μ΄μΌλ‘κ·Έμ νμ μνλ₯Ό λνλ΄λ dialog
λ°μ΄ν°μ λ€μ΄μΌλ‘κ·Έλ₯Ό μ΄κ±°λ λ«λ λ©μλ showDialog()
, closeDialog()
κ° μ μλμ΄ μμ΅λλ€. μ΄μ μ΄ λ―Ήμ€μΈμ μ»΄ν¬λνΈμ μ΄λ»κ² μ£Όμ
ν κΉμ? μλ μ½λλ₯Ό λ³΄κ² μ΅λλ€.
<!-- LoginForm.vue -->
<script>
import { DialogMixin } from './mixins.js';
export default {
// ..
mixins: [ DialogMixin ]
methods: {
submitForm() {
axios.post('login', {
id: this.id,
pw: this.pw
})
.then(() => this.closeDialog())
.catch((error) => new Error(error));
}
}
}
</script>
λ―Ήμ€μΈμ μ¬μ©ν μμ€μ΄ λλ©΄ 보ν΅μ μ±κΈ νμΌ μ»΄ν¬λνΈ μ²΄κ³μμ ES6λ₯Ό λ₯μνκ² μ¬μ©νκ³ μμκ²λλ€. μμ μ½λλ ES6μ λͺ¨λν λ¬Έλ²μ μ΄μ©ν΄ λ―Ήμ€μΈμ λ€λ₯Έ νμΌμμ κ°μ Έμμ μ£Όμ
νλ μ½λμ
λλ€. submitForm()
λ©μλμμ HTTP POST μμ²μ 보λ΄κ³ λλ©΄ this.closeDialog()
λ‘ λ©μλλ₯Ό νΈμΆνλλ° μ΄ λ©μλλ λ―Ήμ€μΈμ μν΄ μ£Όμ
λ λ©μλμ
λλ€. λ°λΌμ LoginForm μ»΄ν¬λνΈμ μλλΌλ μ¬μ©ν μ μμ΅λλ€.
β Plugins π Mixins vs HOC β