cari

Rumah  >  Soal Jawab  >  teks badan

Vue hanya mengemas kini sifat yang dikira apabila keputusan berubah

<p>Pertimbangkan pemudahan berikut bagi masalah yang saya hadapi: </p> <pre class="brush:js;toolbar:false;">eksport lalai { data () { kembali { i_change_alot: 0, }; }, dipasang() { setInterval(() => { this.i_change_alot = Math.random(); }, 10); }, dikira: { someComputedValue() { this.i_change_alot; kembalikan 'a'; } } } </pra> <p>Saya mencipta atribut <kod>i_change_alot</code> yang berubah kepada nilai rawak setiap 10 milisaat. Ini bermakna bahawa sifat menjadi sangat reaktif, jadi ia akan mencetuskan sifat yang dikira. </p> <p>Saya mencetuskan pergantungan (sebagai contoh tujuan) dengan hanya memanggil <code>this.i_change_alot</code>, tetapi <em>hasil</em> </p> <p>Hasil akhirnya ialah sifat yang dikira <code>someCompulatedValue</code> dikemas kini setiap 10 milisaat, yang setahu saya mencetuskan paparan untuk dipaparkan semula. </p> <p>Bagaimana saya boleh membuat <kod>someCompulatedValue</code> hanya dipaparkan semula apabila <em>nilai/hasil</em> </p> <p>(Soalan asal ialah tentang memaparkan tarikh relatif reaktif, seperti "1 saat lalu", "2 saat lalu", dll. Walau bagaimanapun, selepas beberapa ketika ini menjadi <kod>30 minit lalu</ kod>, <kod>31 minit yang lalu</code> Ini bermakna selama satu minit penuh, perwakilan rentetan tidak berubah, tetapi ia masih dipaparkan semula setiap 10 milisaat disebabkan pergantungan pada atribut tarikh). </p> <p>Menurut https://github.com/vuejs/vue/issues/11399, saya boleh mencipta struct dengan pemerhati, tetapi ia kelihatan berlawanan dengan intuitif. </p>
P粉738046172P粉738046172460 hari yang lalu546

membalas semua(1)saya akan balas

  • P粉611456309

    P粉6114563092023-08-26 09:17:09

    Mengapa Vue mencetuskan pengiraan apabila nilainya tidak berubah?

    Sebab Vue tidak akan tahu sama ada keputusan akhir berubah sehingga ia dikira semula. Oleh itu, pembolehubah yang dikira akan dikira semula setiap kali kebergantungannya berubah, yang tidak dapat dielakkan.

    Salah tanggapan yang biasa ialah Vue mengira pembolehubah dengan mengira nilainya, tetapi sebenarnya, Vue mengira pembolehubah mengikut keadaan kebergantungan mereka.

    Elakkan render semula terlalu kerap

    Anda boleh mencipta pemerhati (seperti yang anda tahu) atau membungkus templat menggunakan nilai yang dikira ke dalam komponen.

    Mengapa membungkusnya ke dalam bantuan komponen lain di sini?

    Kerana Vue akan menukar templat anda kepada fungsi render. Fungsi ini dikira semula setiap kali kebergantungannya berubah. Bunyi biasa? Ya, ia berfungsi seperti pembolehubah yang dikira. Kebergantungan fungsi render ialah semua pembolehubah yang anda gunakan dalam templat. Oleh itu, jika anda membungkus pembolehubah yang kerap berubah menjadi komponen, Vue hanya akan memaparkan semula komponen tersebut dan mengelak daripada memaparkan semula komponen besar anda. Ini akan memberi impak besar kepada prestasi anda

    balas
    0
  • Batalbalas