Rumah hujung hadapan web Soal Jawab bahagian hadapan Nilai yang diperolehi oleh vue bukanlah yang terkini

Nilai yang diperolehi oleh vue bukanlah yang terkini

May 24, 2023 pm 01:45 PM

Vue ialah rangka kerja bahagian hadapan berdasarkan corak MVVM, digunakan untuk membina aplikasi satu halaman interaktif. Semasa pembangunan Vue, kadangkala kami menghadapi masalah: nilai yang diperolehi bukan nilai terkini.

Sebagai contoh, kami mempunyai pembolehubah dalam komponen Vue, dan kami mahu melaksanakan operasi tertentu apabila nilainya berubah:

<template>
  <div>
    <p>{{ message }}</p>
    <button @click="changeMessage">更改</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: 'hello world'
    }
  },
  methods: {
    changeMessage() {
      this.message = 'hello Vue'
      console.log(this.message)
      this.doSomething() // doSomething方法需要使用最新的message值
    },
    doSomething() {
      console.log(this.message) // 这里输出的是旧的message值
    }
  }
}
</script>
Salin selepas log masuk

Dalam kod di atas, apabila butang "Tukar" diklik , kami menukar nilai mesej dan mencetak mesej terkini. Walau bagaimanapun, apabila kita memanggil kaedah doSomething, kita mendapati bahawa nilai mesej output bukanlah nilai terkini "hello Vue", tetapi nilai lama "hello world".

Kenapa ni?

Malah, mengemas kini data dalam Vue adalah tidak segerak. Apabila kami menukar nilai pembolehubah, Vue tidak akan membalas kemas kini dengan segera, sebaliknya, ia akan menambah kemas kini pada baris gilir dan mengemas kini DOM dalam gelung acara seterusnya. Oleh itu, apabila kami memanggil kaedah doSomething, Vue masih menunggu gelung acara seterusnya sebelum membalas kemas kini.

Jadi, bagaimana untuk mendapatkan nilai terkini?

Vue menyediakan kaedah $nextTick, yang digunakan untuk melaksanakan fungsi panggil balik selepas DOM dikemas kini. Kami boleh menulis kaedah doSomething secara tidak segerak dan mendapatkan nilai mesej terkini melalui kaedah $nextTick:

<template>
  <div>
    <p>{{ message }}</p>
    <button @click="changeMessage">更改</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: 'hello world'
    }
  },
  methods: {
    changeMessage() {
      this.message = 'hello Vue'
      console.log(this.message)
      this.$nextTick(() => {
        this.doSomething() // 等到DOM更新后再执行doSomething方法
      })
    },
    doSomething() {
      console.log(this.message) // 这里输出的是最新的message值"hello Vue"
    }
  }
}
</script>
Salin selepas log masuk

Dalam kod di atas, kami membalut kaedah doSomething dengan $nextTick Apabila DOM dikemas kini, $nextTick akan Memanggil fungsi panggil balik untuk melaksanakan kaedah kami supaya kami boleh mendapatkan nilai mesej terkini.

Ringkasan:

Mengemas kini data dalam Vue adalah tidak segerak Jika kita ingin mendapatkan nilai terkini, kita perlu menggunakan kaedah $nextTick untuk menunggu DOM dikemas kini sebelum melaksanakan yang sepadan. kaedah. Dalam pembangunan sebenar, kita perlu menggunakan $nextTick pada masa yang sesuai untuk mengelak daripada mendapat nilai lama.

Atas ialah kandungan terperinci Nilai yang diperolehi oleh vue bukanlah yang terkini. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apa itu useeffect? Bagaimana anda menggunakannya untuk melakukan kesan sampingan? Apa itu useeffect? Bagaimana anda menggunakannya untuk melakukan kesan sampingan? Mar 19, 2025 pm 03:58 PM

Apa itu useeffect? Bagaimana anda menggunakannya untuk melakukan kesan sampingan?

Terangkan konsep pemuatan malas. Terangkan konsep pemuatan malas. Mar 13, 2025 pm 07:47 PM

Terangkan konsep pemuatan malas.

Bagaimanakah kari bekerja di JavaScript, dan apakah faedahnya? Bagaimanakah kari bekerja di JavaScript, dan apakah faedahnya? Mar 18, 2025 pm 01:45 PM

Bagaimanakah kari bekerja di JavaScript, dan apakah faedahnya?

Apakah fungsi pesanan yang lebih tinggi dalam JavaScript, dan bagaimana mereka boleh digunakan untuk menulis lebih banyak kod ringkas dan boleh diguna semula? Apakah fungsi pesanan yang lebih tinggi dalam JavaScript, dan bagaimana mereka boleh digunakan untuk menulis lebih banyak kod ringkas dan boleh diguna semula? Mar 18, 2025 pm 01:44 PM

Apakah fungsi pesanan yang lebih tinggi dalam JavaScript, dan bagaimana mereka boleh digunakan untuk menulis lebih banyak kod ringkas dan boleh diguna semula?

Bagaimanakah algoritma Rekonsiliasi React berfungsi? Bagaimanakah algoritma Rekonsiliasi React berfungsi? Mar 18, 2025 pm 01:58 PM

Bagaimanakah algoritma Rekonsiliasi React berfungsi?

Bagaimana anda mengelakkan tingkah laku lalai di pengendali acara? Bagaimana anda mengelakkan tingkah laku lalai di pengendali acara? Mar 19, 2025 pm 04:10 PM

Bagaimana anda mengelakkan tingkah laku lalai di pengendali acara?

Apakah useContext? Bagaimana anda menggunakannya untuk berkongsi keadaan antara komponen? Apakah useContext? Bagaimana anda menggunakannya untuk berkongsi keadaan antara komponen? Mar 19, 2025 pm 03:59 PM

Apakah useContext? Bagaimana anda menggunakannya untuk berkongsi keadaan antara komponen?

Apakah kelebihan dan kekurangan komponen terkawal dan tidak terkawal? Apakah kelebihan dan kekurangan komponen terkawal dan tidak terkawal? Mar 19, 2025 pm 04:16 PM

Apakah kelebihan dan kekurangan komponen terkawal dan tidak terkawal?

See all articles