Perbedaan antara acara yang dibuat dan dipasang di Vue.js

181

Dokumentasi Vue.js menjelaskan createddan mountedacara - acara sebagai berikut:

created

Disebut sinkron setelah instance dibuat. Pada tahap ini, instance telah selesai memproses opsi yang berarti yang berikut telah disiapkan: observasi data, properti yang dihitung, metode, panggilan balik kejadian / acara. Namun, tahap pemasangan belum dimulai, dan properti $ el belum tersedia.

mounted

Dipanggil setelah instance baru saja dipasang di mana el digantikan oleh vm. $ El yang baru dibuat. Jika instance root di-mount ke elemen di-dokumen, vm. $ El juga akan di-dokumen saat di-mount dipanggil.

Hook ini tidak dipanggil selama rendering sisi server.

Saya mengerti teorinya, tetapi saya punya 2 pertanyaan tentang praktik:

  1. Apakah ada kasus di mana createdakan digunakan mounted?
  2. Apa yang bisa saya gunakan createduntuk acara, dalam situasi kehidupan nyata (kode nyata)?
lesssugar
sumber
13
createddipanggil sebelumnya, jadi masuk akal untuk memicu pengambilan data dari API backend misalnya.
Egor Stambakio
4
Dapat mengkonfirmasi, contoh-contoh dalam buku Fullstack Vue semua gunakan created()untuk mengirim tindakan untuk panggilan api.
chovy

Jawaban:

255

created(): sejak pemrosesan opsi selesai, Anda memiliki akses ke dataproperti reaktif dan mengubahnya jika Anda mau. Pada tahap ini DOM belum dipasang atau ditambahkan. Jadi, Anda tidak dapat melakukan manipulasi DOM di sini

mounted(): dipanggil setelah DOM dipasang atau ditampilkan. Di sini Anda memiliki akses ke elemen DOM dan manipulasi DOM dapat dilakukan misalnya mendapatkan innerHTML:

console.log(element.innerHTML)

Jadi pertanyaan Anda:

  1. Is there any case where created would be used over mounted?

Dibuat umumnya digunakan untuk mengambil data dari API backend dan mengaturnya ke properti data. Tetapi dalam SSR mounted()hook tidak ada, Anda perlu melakukan tugas-tugas seperti mengambil data di hook yang dibuat saja

  1. What can I use the created event for, in real-life (real-code) situation?

Untuk mengambil data awal yang diperlukan untuk dirender (seperti JSON) dari API eksternal dan menugaskannya ke properti data reaktif apa pun

data:{
    myJson : null,
    errors: null
},
created(){
    //pseudo code
    database.get().then((res) => {
        this.myJson = res.data;
    }).catch((err) => {
        this.errors = err;
    });
}
Vamsi Krishna
sumber
6
Ketika membuat panggilan api dibuat, apakah itu menunggu semua operasi async selesai sebelum melanjutkan ke tahap siklus hidup berikutnya?
Ominus
10
@Ominus tidak itu tidak menunggu, Jalankan ini fiddle- jsfiddle.net/1k26sqrx/] dan periksa log konsol
Vamsi Krishna
1
Saya perhatikan bahwa ketika di-mount () digunakan alih-alih dibuat (). Vue menguji jika set variabel reaktif, benar-benar ada sebagai variabel reactie. Jika tidak, kesalahan dilemparkan. Ini bukan kasus di dibuat () "Properti atau metode" foo "tidak didefinisikan pada contoh tetapi direferensikan selama render. Pastikan bahwa properti ini reaktif."
Rob Juurlink