Apa perbedaan utama antara metode dan nilai yang dihitung dalam Vue.js?
Mereka terlihat sama dan dapat dipertukarkan.
javascript
methods
vue.js
vuejs2
computed-properties
Bootstrap4
sumber
sumber
Jawaban:
Nilai dan metode yang dikomputasi sangat berbeda dalam Vue dan jelas tidak dapat dipertukarkan dalam kebanyakan kasus.
Properti yang Dihitung
Nama yang lebih tepat untuk nilai yang dihitung adalah properti yang dihitung . Bahkan, ketika Vue dipakai, properti dihitung dikonversi menjadi properti Vue dengan pengambil dan terkadang setter. Pada dasarnya Anda dapat menganggap nilai yang dihitung sebagai nilai turunan yang akan diperbarui secara otomatis setiap kali salah satu nilai dasar yang digunakan untuk menghitungnya diperbarui. Anda tidak memanggil yang dihitung dan tidak menerima parameter apa pun. Anda mereferensikan properti yang dikomputasi sama seperti Anda akan properti data. Inilah contoh klasik dari dokumentasi :
Yang dirujuk dalam DOM seperti ini:
Nilai yang dihitung sangat berharga untuk memanipulasi data yang ada di Vue Anda. Kapan pun Anda ingin memfilter atau mengubah data Anda, biasanya Anda akan menggunakan nilai yang dihitung untuk tujuan itu.
Nilai yang dihitung juga di-cache untuk menghindari penghitungan berulang suatu nilai yang tidak perlu dihitung ulang ketika belum berubah (karena mungkin tidak ada dalam satu lingkaran misalnya).
metode
Suatu metode hanyalah fungsi yang terikat pada instance Vue. Ini hanya akan dievaluasi ketika Anda secara eksplisit menyebutnya. Seperti semua fungsi javascript, ia menerima parameter dan akan dievaluasi ulang setiap kali dipanggil. Metode berguna dalam situasi yang sama fungsi apa pun berguna.
Dokumentasi Vue sangat bagus dan mudah diakses. Saya merekomendasikannya.
sumber
Ketika @gleenk meminta contoh praktis untuk membuat perbedaan cache dan ketergantungan antara metode dan properti yang dihitung, saya akan menunjukkan skenario sederhana:
app.js
Di sini kita memiliki 2 metode dan 2 properti yang dikomputasi yang melakukan tugas yang sama. Metode
addToAmethod
&addToBmethod
dan properti yang dihitungaddToAcomputed
&addToBcomputed
semua menambahkan +20 (yaituage
nilai) ke salah satua
ataub
. Mengenai metode, keduanya disebut setiap kali tindakan telah dilakukan pada salah satu properti yang terdaftar, bahkan jika dependensi untuk satu metode tertentu tidak berubah. Untuk properti yang dihitung, kode dieksekusi hanya ketika dependensi telah berubah; misalnya, salah satu nilai properti spesifik yang merujuk ke A atau B akan memicuaddToAcomputed
atauaddToBcomputed
, masing-masing.Metode dan deskripsi yang dikomputasi tampak sangat mirip, tetapi karena @Abdullah Khan telah menentukannya , mereka bukan hal yang sama ! Sekarang mari kita coba menambahkan beberapa html untuk mengeksekusi semuanya bersama dan melihat di mana perbedaannya.
Demo kasus Metode
Hasil yang dijelaskan
Ketika saya mengklik tombol "Tambah ke A" , semua metode dipanggil (lihat hasil layar log konsol di atas),
addToBmethod()
ini juga dieksekusi tetapi saya tidak menekan tombol "Tambahkan ke B" ; nilai properti yang merujuk ke B tidak berubah. Perilaku yang sama terjadi jika kita memutuskan untuk mengklik tombol "Tambahkan ke B" , karena sekali lagi kedua metode akan dipanggil secara independen dari perubahan ketergantungan. Menurut skenario ini, ini adalah praktik buruk karena kami menjalankan metode setiap waktu, bahkan ketika dependensi tidak berubah. Ini benar-benar menghabiskan sumber daya karena tidak ada cache untuk nilai properti yang belum berubah.Demo kasus properti yang dihitung
Hasil yang dijelaskan
Ketika saya mengklik tombol "Add to A" , hanya properti yang dikomputasi
addToAcomputed
dipanggil karena, seperti yang sudah kami katakan, properti yang dikomputasi dieksekusi hanya ketika dependensi telah berubah. Dan karena saya tidak menekan tombol "Tambahkan ke B" dan nilai properti usia untuk B tidak berubah, tidak ada alasan untuk memanggil dan menjalankan properti yang dihitungaddToBcomputed
. Jadi, dalam arti tertentu, properti yang dikomputasi mempertahankan nilai "sama tidak berubah" untuk properti B seperti semacam cache. Dan dalam keadaan ini ini dianggap praktik yang baik .sumber
Dari
docs
Jika Anda ingin data di-cache menggunakan properti Computed di sisi lain jika Anda tidak ingin data di-cache menggunakan properti Metode sederhana.
sumber
Salah satu perbedaan antara komputasi dan metode. Misalkan kita memiliki fungsi yang akan mengembalikan nilai penghitung (penghitung hanya variabel). Mari kita lihat bagaimana fungsi berperilaku baik dalam komputasi maupun metode
Dihitung
Pada saat pertama kali dieksekusi kode di dalam fungsi akan dieksekusi dan vuejs akan menyimpan nilai penghitung dalam cache (untuk mengakses lebih cepat). Tetapi ketika kita lagi memanggil fungsi vuejs tidak akan lagi menjalankan kode yang tertulis di dalam fungsi itu. Pertama-tama memeriksa setiap perubahan yang dilakukan ke konter atau tidak. Jika ada perubahan yang dilakukan maka hanya akan mengeksekusi kembali kode yang ada di dalam fungsi itu. Jika tidak ada perubahan yang dilakukan pada counter vuejs tidak akan lagi menjalankan fungsinya. Ini hanya akan mengembalikan hasil sebelumnya dari cache.
metode
Ini seperti metode normal dalam javascript. Setiap kali kita memanggil metode itu akan selalu menjalankan kode di dalam fungsi terlepas dari perubahan yang dibuat ke penghitung.
Metode akan selalu mengeksekusi ulang kode terlepas dari perubahan dalam kode. di mana seperti yang dikomputasi akan mengeksekusi kembali kode maka hanya jika salah satu dari nilai dependensinya berubah. Kalau tidak, itu akan memberi kita hasil sebelumnya dari cache tanpa menjalankan kembali
sumber
Inilah uraian pertanyaan ini.
Kapan harus menggunakan metode
Kapan menggunakan properti yang dihitung
sumber
Properti yang Dihitung
Properti terkomputasi disebut juga nilai terkomputasi. Artinya, mereka memperbarui dan dapat diubah kapan saja. Selain itu, cache data hingga berubah. Ketika Vue dipakai, properti dihitung dikonversi menjadi properti.
Satu hal lagi yang ingin saya bagikan, Anda tidak dapat melewatkan parameter apa pun di properti yang dihitung itu sebabnya saat memanggil properti komputer apa pun tidak diperlukan tanda kurung.
Metode
Metode sama dengan fungsi dan bekerja dengan cara yang sama. Selain itu, metode tidak melakukan apa-apa kecuali Anda menyebutnya. Juga, seperti semua fungsi javascript, ia menerima parameter dan akan dievaluasi ulang setiap kali dipanggil. Setelah itu, mereka tidak bisa menyimpan nilai
Di dalam metode memanggil kurung ada dan Anda dapat mengirim satu atau lebih parameter di dalamnya.
sumber
Menemukan pertanyaan yang sama. Bagi saya lebih jelas seperti ini:
v-on directive
diikuti oleh suatu metode, ia tahu persis metode mana yang harus dipanggil dan kapan harus memanggilnya.v-on directive
itu akan dipanggil setiap kali suatu peristiwa dipicu pada halaman yang memperbarui DOM (atau hanya perlu merender ulang bagian dari halaman). Bahkan ketika metode itu tidak ada hubungannya dengan peristiwa yang dipicu.this
kata dalam definisi fungsinya.Yang perlu diambil di sini adalah praktik terbaik untuk menggunakan
computed
properti jika metode tidak dipanggil denganv-on directive
.sumber