[Medium] π Π₯ΡΠΊΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° Vue
1. ΠΠ±ΡΡΡΠ½ΠΈΡΠ΅ Ρ ΡΠΊΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° Vue (Π²ΠΊΠ»ΡΡΠ°Ρ Vue 2 ΠΈ Vue 3)β
ΠΠ±ΡΡΡΠ½ΠΈΡΠ΅ Ρ ΡΠΊΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° Vue ΠΊΠ°ΠΊ Π² Vue 2, ΡΠ°ΠΊ ΠΈ Π² Vue 3.
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Vue ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΡΠ΅ΡΠ΅Π· ΡΠ°Π·Ρ ΠΎΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄ΠΎ ΡΠ°Π·ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π₯ΡΠΊΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° β ΡΡΠΎ ΠΎΠ±ΡΠ°ΡΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°, ΡΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΠΈΠ΅ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠ°Π·Π΅.
ΠΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΊΠ°Π»Π° ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π°β
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ -> ΠΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ -> ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ -> Π Π°Π·ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
β β β β
Created Mounted Updated Unmounted
Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ Vue 2 ΠΈ Vue 3β
| Vue 2 (Options) | Vue 3 (Options) | Vue 3 (Composition) | ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ |
|---|---|---|---|
beforeCreate | beforeCreate | setup() | Π΄ΠΎ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° |
created | created | setup() | ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Π³ΠΎΡΠΎΠ²ΠΎ |
beforeMount | beforeMount | onBeforeMount | ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ DOM |
mounted | mounted | onMounted | ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ DOM |
beforeUpdate | beforeUpdate | onBeforeUpdate | ΠΏΠ΅ΡΠ΅Π΄ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ |
updated | updated | onUpdated | ΠΏΠΎΡΠ»Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ DOM |
beforeDestroy | beforeUnmount | onBeforeUnmount | ΠΏΠ΅ΡΠ΅Π΄ ΡΠ°Π·ΡΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° |
destroyed | unmounted | onUnmounted | ΠΏΠΎΡΠ»Π΅ ΡΠ°Π·ΡΡΡΠ΅Π½ΠΈΡ |
activated | activated | onActivated | KeepAlive Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°Π½ |
deactivated | deactivated | onDeactivated | KeepAlive Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°Π½ |
errorCaptured | errorCaptured | onErrorCaptured | ΠΏΠ΅ΡΠ΅Ρ Π²Π°Ρ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ² |
1) Π€Π°Π·Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΡβ
beforeCreate / createdβ
<script>
export default {
data() {
return {
message: 'Hello Vue',
};
},
beforeCreate() {
// data/methods Π΅ΡΡ Π½Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ
console.log(this.message); // undefined
console.log(this.$el); // undefined
},
created() {
// API ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ, Π½ΠΎ DOM Π΅ΡΡ Π½Π΅ ΡΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½
console.log(this.message); // 'Hello Vue'
console.log(this.$el); // undefined
// ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠ΅Π΅ ΠΌΠ΅ΡΡΠΎ Π΄Π»Ρ API-Π·Π°ΠΏΡΠΎΡΠΎΠ²
this.fetchData();
},
methods: {
async fetchData() {
const response = await fetch('/api/data');
this.data = await response.json();
},
},
};
</script>
Π’ΠΈΠΏΠΈΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅:
created: API-Π·Π°ΠΏΡΠΎΡΡ, ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π±Π΅Π· DOM- ΠΠ·Π±Π΅Π³Π°ΠΉΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Ρ DOM Π·Π΄Π΅ΡΡ
2) Π€Π°Π·Π° ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡβ
beforeMount / mountedβ
<template>
<div ref="myElement">
<h1>{{ title }}</h1>
<canvas ref="myCanvas"></canvas>
</div>
</template>
<script>
export default {
data() {
return { title: 'ΠΠΈΠ·Π½Π΅Π½Π½ΡΠΉ ΡΠΈΠΊΠ» Vue' };
},
beforeMount() {
console.log(this.$refs.myElement); // undefined
},
mounted() {
console.log(this.$refs.myElement); // Π΄ΠΎΡΡΡΠΏΠ΅Π½
// ΠΠ°ΡΡΡΠΎΠΉΠΊΠ°, Π·Π°Π²ΠΈΡΡΡΠ°Ρ ΠΎΡ DOM
this.initCanvas();
this.initChart();
},
methods: {
initCanvas() {
const canvas = this.$refs.myCanvas;
const ctx = canvas.getContext('2d');
// ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅...
},
initChart() {
// ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΎΡΠΎΠ½Π½Π΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ DOM
},
},
};
</script>
Π’ΠΈΠΏΠΈΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅:
- ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ DOM
- Π‘ΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ UI/Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
- ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΉ DOM
3) Π€Π°Π·Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡβ
beforeUpdate / updatedβ
<template>
<div>
<p>Π‘ΡΡΡΡΠΈΠΊ: {{ count }}</p>
<button @click="count++">Π£Π²Π΅Π»ΠΈΡΠΈΡΡ</button>
</div>
</template>
<script>
export default {
data() {
return { count: 0 };
},
beforeUpdate() {
// Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈΡΡ, DOM Π΅ΡΡ Π½Π΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ½
},
updated() {
// DOM ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ½
// ΠΈΠ·Π±Π΅Π³Π°ΠΉΡΠ΅ ΠΌΡΡΠ°ΡΠΈΠΉ ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π·Π΄Π΅ΡΡ Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ ΡΠΈΠΊΠ»ΠΎΠ²
},
};
</script>
Π’ΠΈΠΏΠΈΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅:
- ΠΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ/ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ DOM
- ΠΠ·Π±Π΅Π³Π°ΠΉΡΠ΅ ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΡΡ
ΠΌΡΡΠ°ΡΠΈΠΉ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π²
updated