cari
Rumahhujung hadapan webView.jsCara menggunakan sifat dan pendengar yang dikira dalam Vue3

Atribut yang dikira

Kami tahu bahawa sesetengah data dalam data boleh dipaparkan secara terus melalui sintaks interpolasi dalam templat, tetapi dalam beberapa kes, kami mungkin perlu melakukan beberapa transformasi pada data sebelum memaparkannya, atau kita perlu Menggabungkan berbilang data untuk paparan

Menggunakan ungkapan dalam templat boleh menjadi sangat mudah, tetapi ia pada asalnya direka untuk operasi mudah Meletakkan terlalu banyak logik dalam templat akan menjadikan templat Terlebih berat dan sukar untuk dikekalkan, dan jika digunakan di berbilang tempat, akan terdapat banyak kod pendua

Jadi kami berharap untuk memisahkan logik perniagaan dan antara muka UI Salah satu cara ialah mengekstrak logik ke dalam kaedah, tetapi pendekatan ini mempunyai kelemahan berikut

  • Semua proses penggunaan data akan menjadi panggilan kaedah

  • Pemerolehan berbilang Data perlu memanggil kaedah beberapa kali untuk melaksanakan logik yang sepadan. Tiada cache

Malah, 对于任何包含响应式数据的复杂逻辑,你都应该使用计算属性

<div id="app">
  <!-- 计算属性的使用和普通状态的使用方式是一致的 -->
  <h3 id="nbsp-fullname-nbsp">{{ fullname }}</h3>
</div>

<script>
  Vue.createApp({
    data() {
      return {
        firstname: &#39;Klaus&#39;,
        lastname: &#39;Wang&#39;
      }
    },
    computed: {
      fullname() {
        return this.firstname + &#39; &#39; + this.lastname
      }
    }
  }).mount(&#39;#app&#39;)

caching

sifat yang dikira akan Cache berdasarkan kebergantungan mereka apabila data tidak tukar, atribut yang dikira tidak perlu dikira semula

Tetapi jika data bergantung berubah, atribut yang dikira akan tetap dikira semula apabila digunakan

Dan antara muka akan dipaparkan semula menggunakan yang terkini nilai harta yang dikira

pengambil dan penetap

Sifat yang dikira hanya memerlukan satu kaedah pengambil dalam kebanyakan kes, jadi kami Atribut yang dikira akan ditulis terus sebagai fungsi

<div id="app">
  <!-- 计算属性的使用和普通状态的使用方式是一致的 -->
  <h3 id="nbsp-fullname-nbsp">{{ fullname }}</h3>
  <button @click="change">change</button>
</div>
<script>
  Vue.createApp({
    data() {
      return {
        firstname: &#39;Klaus&#39;,
        lastname: &#39;Wang&#39;
      }
    },
    methods: {
      change() {
        this.fullname = &#39;Alex Li&#39;
      }
    },
    computed: {
      // 计算属性的完整写法
      fullname: {
        get() {
          return this.firstname + &#39; &#39; + this.lastname
        },
        set(v) {
          this.firstname = v.split(&#39; &#39;)[0]
          this.lastname = v.split(&#39; &#39;)[1]
        }
      }
    }
  }).mount(&#39;#app&#39;)
</script>

Pendengar

mentakrifkan data dalam objek yang dikembalikan oleh data Data ini terikat pada templat melalui sintaks interpolasi dan kaedah lain Apabila data berubah , templat akan dikemas kini secara automatik untuk memaparkan data terkini

Tetapi dalam beberapa kes, kami ingin memantau perubahan dalam data tertentu dalam logik kod Dalam kes ini, kami perlu menggunakan jam tangan pendengar untuk melengkapkan

Vue.createApp({
  data() {
    return {
      info: {
        name: &#39;Klaus&#39;
      }
    }
  },
  watch: {
    // 可以使用watch监听响应式数据的改变
    // 对应有两个参数
    // 参数一 --- 新值
    // 参数二 --- 旧值
    info(newV, oldV) {
      // 如果监听的值是对象,获取到的新值和旧值是对应对象的代理对象
      console.log(newV, oldV)

      // 代理对象 转 原生对象
      // 1. 使用浅拷贝获取一个新的对象,获取的新的对象为原生对象
      console.log({...newV})

      // 2. 使用Vue.toRaw方法获取原生对象
      console.log(Vue.toRaw(newV))
    }
  },
  methods: {
    change() {
      this.info = {
        name: &#39;Steven&#39;
      }
    }
  }
}).mount(&#39;#app&#39;)

Pilihan konfigurasi

属性 说明
deep 是否开启深度监听
值为boolean
未开启的时候,如果监听的是对象,那么只有对象的引用发生改变的时候,才会触发watch回调
开始后,如果监听的是对象,那么只要对象中的任意一个属性发生了改变,就会触发watch回调
immediate 是否立即开始监听
默认情况下,初次渲染是不会触发watch监听,只有当值发生改变后,才会触发watch监听
将immediate设置为true后,初次渲染也会触发watch监听,此时oldValue的值为undefined
Vue.createApp({
  data() {
    return {
      info: {
        name: &#39;Klaus&#39;
      }
    }
  },
  watch: {
    info: {
      // 开启了深度监听后,当info的属性发生改变的时候,就会触发对应的watch回调
      // 注意: 和直接修改info引用不同的是,如果直接修改的是对象的属性
      // 那么此时newV和oldV是同一个对象的引用, 此时也就获取不到对应的旧值
      handler(newV, oldV) {
        console.log(newV, oldV)
        console.log(newV === oldV)  // => true
      },
      deep: true,
      immediate: true
    }
  },
  methods: {
    change() {
      this.info.name = &#39;Steven&#39;
    }
  }
}).mount(&#39;#app&#39;)

. Kaedah penulisan lain

直接监听对象属性

watch: {
  &#39;info.name&#39;(newV, oldV){
    console.log(newV, oldV)
  }
}

字符串写法

Vue.createApp({
  data() {
    return {
      info: {
        name: &#39;Klaus&#39;
      }
    }
  },
  watch: {
    // watch的值如果是一个字符串的时候
    // 会自动以该字符串作为函数名去methods中查找对应的方法
    &#39;info.name&#39;: &#39;watchHandler&#39;
  },
  methods: {
    change() {
      this.info.name = &#39;Steven&#39;
    },
    watchHandler(newV, oldV){
      console.log(newV, oldV)
    }
  }
}).mount(&#39;#app&#39;)

数组写法

Vue.createApp({
  data() {
    return {
      info: {
        name: &#39;Klaus&#39;
      }
    }
  },
  watch: {
    &#39;info.name&#39;: [
      &#39;watchHandler&#39;,

      function handle() {
        console.log(&#39;handler2&#39;)
      },

      {
        handler() {
          console.log(&#39;handler3&#39;)
        }
      }
    ]
  },
  methods: {
    change() {
      this.info.name = &#39;Steven&#39;
    },
    watchHandler(){
      console.log(&#39;handler1&#39;)
    }
  }
}).mount(&#39;#app&#39;)

$watch

Vue.createApp({
  data() {
    return {
      info: {
        name: &#39;Klaus&#39;
      }
    }
  },
  created() {
    /*
          $watch 参数列表
            参数一 --- 侦听源
            参数二 --- 侦听回调
            参数三 --- 配置对象
        */
    this.$watch(&#39;info.name&#39;, (newV, oldV) => console.log(newV, oldV), {
      immediate: true
    })
  },
  methods: {
    change() {
      this.info.name = &#39;Steven&#39;
    }
  }
}).mount(&#39;#app&#39;)

Atas ialah kandungan terperinci Cara menggunakan sifat dan pendengar yang dikira dalam Vue3. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Artikel ini dikembalikan pada:亿速云. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
React dan Netflix: Meneroka HubunganReact dan Netflix: Meneroka HubunganApr 26, 2025 am 12:11 AM

Netflix menggunakan React untuk meningkatkan pengalaman pengguna. 1) Ciri -ciri komponen React membantu Netflix Split Complex UI ke dalam modul yang boleh diurus. 2) Maya DOM mengoptimumkan kemas kini UI dan meningkatkan prestasi. 3) Menggabungkan Redux dan GraphQL, Netflix dengan cekap menguruskan status aplikasi dan aliran data.

VUE.JS vs Rangka Kerja Backend: Menjelaskan perbezaanVUE.JS vs Rangka Kerja Backend: Menjelaskan perbezaanApr 25, 2025 am 12:05 AM

Vue.js adalah kerangka depan, dan rangka kerja belakang digunakan untuk mengendalikan logik sisi pelayan. 1) Vue.js memberi tumpuan kepada membina antara muka pengguna dan memudahkan pembangunan melalui pengikatan data komponen dan responsif. 2) Rangka kerja back-end seperti Express dan Django mengendalikan permintaan HTTP, operasi pangkalan data dan logik perniagaan, dan dijalankan di pelayan.

Vue.js dan stack frontend: Memahami sambunganVue.js dan stack frontend: Memahami sambunganApr 24, 2025 am 12:19 AM

Vue.js disepadukan dengan tumpuan teknologi front-end untuk meningkatkan kecekapan pembangunan dan pengalaman pengguna. 1) Alat Pembinaan: Mengintegrasikan dengan Webpack dan Rollup untuk mencapai pembangunan modular. 2) Pengurusan Negeri: Bersepadu dengan VUEX untuk menguruskan status aplikasi yang kompleks. 3) Routing: Mengintegrasikan dengan Vuerouter untuk merealisasikan penghalaan aplikasi tunggal halaman. 4) Preprocessor CSS: Menyokong SASS dan kurang untuk meningkatkan kecekapan pembangunan gaya.

Netflix: Meneroka Penggunaan React (atau Rangka Kerja Lain)Netflix: Meneroka Penggunaan React (atau Rangka Kerja Lain)Apr 23, 2025 am 12:02 AM

Netflix memilih React untuk membina antara muka penggunanya kerana reka bentuk komponen React dan mekanisme DOM maya dapat mengendalikan antara muka yang kompleks dan kemas kini yang kerap. 1) Reka bentuk berasaskan komponen membolehkan Netflix memecah antara muka ke dalam widget yang boleh diurus, meningkatkan kecekapan pembangunan dan pemeliharaan kod. 2) Mekanisme DOM maya memastikan kelancaran dan prestasi tinggi antara muka pengguna Netflix dengan meminimumkan operasi DOM.

Vue.js dan frontend: menyelam mendalam ke dalam rangka kerjaVue.js dan frontend: menyelam mendalam ke dalam rangka kerjaApr 22, 2025 am 12:04 AM

Vue.js disukai oleh pemaju kerana mudah digunakan dan berkuasa. 1) Sistem pengikat data responsifnya secara automatik mengemas kini paparan. 2) Sistem komponen meningkatkan kebolehgunaan semula dan mengekalkan kod. 3) Ciri -ciri pengkomputeran dan pendengar meningkatkan kebolehbacaan dan prestasi kod. 4) Menggunakan vuedevtools dan memeriksa kesilapan konsol adalah teknik debugging biasa. 5) Pengoptimuman Prestasi termasuk penggunaan atribut utama, atribut yang dikira dan komponen-komponen Alive. 6) Amalan terbaik termasuk penamaan komponen yang jelas, penggunaan komponen fail tunggal dan penggunaan cangkuk kitaran hidup yang rasional.

Kekuatan Vue.js di Frontend: Ciri dan Manfaat UtamaKekuatan Vue.js di Frontend: Ciri dan Manfaat UtamaApr 21, 2025 am 12:07 AM

Vue.js adalah rangka kerja JavaScript yang progresif yang sesuai untuk membina aplikasi front-end yang cekap dan boleh dipelihara. Ciri -ciri utamanya termasuk: 1. Pengikatan data responsif, 2. Pembangunan Komponen, 3. Dom maya. Melalui ciri -ciri ini, Vue.js memudahkan proses pembangunan, meningkatkan prestasi aplikasi dan mengekalkan, menjadikannya sangat popular dalam pembangunan web moden.

Adakah vue.js lebih baik daripada bertindak balas?Adakah vue.js lebih baik daripada bertindak balas?Apr 20, 2025 am 12:05 AM

Vue.js dan bertindak balas masing -masing mempunyai kelebihan dan kekurangan mereka sendiri, dan pilihannya bergantung kepada keperluan projek dan keadaan pasukan. 1) vue.js sesuai untuk projek kecil dan pemula kerana kesederhanaan dan mudah digunakan; 2) React sesuai untuk projek besar dan UI yang kompleks kerana reka bentuk ekosistem dan komponennya yang kaya.

Fungsi Vue.js: Meningkatkan Pengalaman Pengguna di FrontendFungsi Vue.js: Meningkatkan Pengalaman Pengguna di FrontendApr 19, 2025 am 12:13 AM

Vue.js meningkatkan pengalaman pengguna melalui pelbagai fungsi: 1. Sistem responsif menyedari maklum balas data masa nyata; 2. Pembangunan komponen meningkatkan kebolehgunaan semula kod; 3. Vuerouter menyediakan navigasi lancar; 4. Data dinamik mengikat dan animasi peralihan meningkatkan kesan interaksi; 5. Mekanisme pemprosesan ralat memastikan maklum balas pengguna; 6. Pengoptimuman prestasi dan amalan terbaik meningkatkan prestasi aplikasi.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

MantisBT

MantisBT

Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).