Rumah > hujung hadapan web > View.js > teks badan

Memperkenalkan API Komposisi dan penggunaan terasnya dalam Vue3

藏色散人
Lepaskan: 2021-12-10 15:04:56
ke hadapan
2485 orang telah melayarinya

Penggunaan teras API Komposisi dalam Vue3

Apakah API Komposisi?

API Komposisi juga dipanggil API gabungan, iaitu Vue3. Ciri baharu dalam x. Dengan mencipta komponen Vue, kami boleh mengekstrak bahagian antara muka yang boleh diulang ke dalam segmen kod yang boleh digunakan semula Sebelum API Komposisi, kod perniagaan yang berkaitan dengan Vue perlu dikonfigurasikan ke kawasan tertentu dalam pilihan projek besar, ia akan menyebabkan masalah kemudiannya. Penyelenggaraan agak rumit, dan kebolehgunaan semula kod tidak tinggi.

Gunakan ref dan reaktif untuk mentakrifkan data responsif dalam persediaan

Sebelum menggunakan ref dan reaktif untuk mentakrif data, anda perlu menyahbina daripada vue.

import {ref,reactive} from 'vue';
Salin selepas log masuk

Kedua-dua ref dan reaktif boleh menentukan data responsif Data yang ditakrifkan boleh diperolehi secara langsung dalam templat Vue Walau bagaimanapun, jika ia diperoleh melalui kaedah, terdapat perbezaan tertentu dalam pemerolehan data yang ditakrifkan oleh ref dan reaktif , data yang ditakrifkan oleh ref perlu diperoleh secara tidak langsung melalui atribut nilai, dan data yang ditakrifkan oleh reaktif boleh diperolehi secara langsung.

export default {
  setup() {
    // 使用ref定义响应式数据
    const title = ref("这是一个标题");
    // 使用reactive定义响应式数据
    const userinfo = reactive({
      username: "张三",
      age: 20
    });
    // 获取reactive中的属性可以直接获取
    const getUserName = () => {
      alert(userinfo.username)
    };
    // 获取ref中的数据需要通过value属性
    const getTitle = () => {
      alert(title.value)
    };
    const setUserName = () => {
      // 修改reactive中的属性可以直接修改
      userinfo.username = "修改后的张三"
    };
    const setTitle = () => {
      // 修改ref中的属性,需要通过value
      title.value = "这是修改后的标题"
    };
    return {
      title,
      userinfo,
      getUserName,
      getTitle,
      setTitle,
      setUserName
    }
  },
  data() {
    return {
      msg: "这是Home组件的msg"
    }
  },
  methods: {
    run() {
      alert('这是Home组件的run方法')
    }
  }
}
Salin selepas log masuk

Anda boleh menggunakan model v untuk terus melaksanakan pengikatan data dua hala.

<input type="text" v-model="title">
<input type="text" v-model="userinfo.username">
Salin selepas log masuk

toRefs menyahkonstruk data objek responsif

Sebab mengapa toRefs diperlukan adalah kerana data yang dinyahkonstruk oleh toRefs juga mempunyai ciri responsif, melalui operasi pengembangan tradisional Menyahkonstruk simbol tidak mempunyai ciri-ciri responsif, itulah sebabnya toRefs diperlukan.

Nyahbina toRefs

import {ref,reactive,toRefs} from &#39;vue&#39;;
Salin selepas log masuk

daripada vue dan buat pengubahsuaian berikut dalam data pemulangan persediaan

return {
  title,
  userinfo,
  getUserName,
  getTitle,
  setTitle,
  setUserName,
  ...toRefs(article)
}
Salin selepas log masuk

Atribut yang dikira dalam persediaan

Sifat yang dikira dalam persediaan adalah serupa dengan sifat yang dikira umum Perbezaannya ialah ini tidak boleh dibaca.

setup() {
    let userinfo = reactive({
      firstName: "",
      lastName: ""
    });
    let fullName = computed(() => {
      return userinfo.firstName + " " + userinfo.lastName
    })
    return {
      ...toRefs(userinfo),
      fullName
    }
  }
Salin selepas log masuk

baca sahaja: Proksi baca sahaja dalam

Maksud baca sahaja ialah dapat menukar objek responsif kepada objek primitif biasa.

Perkenalkan baca sahaja.

import {computed, reactive,toRefs,readonly} from &#39;vue&#39;
Salin selepas log masuk

Lepaskan objek responsif kepada baca sahaja.

let userinfo = reactive({
  firstName: "666",
  lastName: ""
});
userinfo = readonly(userinfo);
Salin selepas log masuk

watchEffect dalam persediaan

watchEffect dalam persediaan mempunyai ciri-ciri berikut.

boleh memantau perubahan data dalam persediaan Setelah data berubah, fungsi panggil balik dalam watchEffect akan dilaksanakan.

Data dalam persediaan tidak akan berubah dalam masa nyata dan ia akan dilaksanakan sekali pada mulanya.

setup() {
    let data = reactive({
      num: 1
    });
    watchEffect(() => {
      console.log(`num2=${data.num}`);
    });
    setInterval(() => {
      data.num++;
    },1000)
    return {
      ...toRefs(data)
    }
  }
Salin selepas log masuk

tonton dalam persediaan

Kaedah asas menggunakan jam tangan untuk memantau data.

setup() {
    let keyword = ref("111");
    watch(keyword,(newData,oldData) => {
      console.log("newData是:",newData);
      console.log("oldData是:",oldData);
    })
    return {
      keyword
    }
  }
Salin selepas log masuk

Perbezaan antara jam tangan dan watchEffect

jam tangan tidak akan dilaksanakan apabila halaman dipaparkan buat kali pertama, tetapi watchEffect akan.

Jam tangan boleh mendapatkan nilai sebelum dan selepas status data berubah.

Fungsi cangkuk kitaran hayat dalam persediaan

Memperkenalkan API Komposisi dan penggunaan terasnya dalam Vue3

Cangkuk kitaran hayat dalam persediaan adalah serupa dengan memanggil fungsi secara terus.

  setup() {
    let keyword = ref("111");
    watch(keyword,(newData,oldData) => {
      console.log("newData是:",newData);
      console.log("oldData是:",oldData);
    })
    onMounted(() => {
      console.log(&#39;onMounted&#39;);
    })
    onUpdated(() => {
      console.log(&#39;onUpdated&#39;);
    })
    return {
      keyword
    }
  }
Salin selepas log masuk

Props dalam persediaan

nilai pas komponen induk.

<Search :msg="msg" />
Salin selepas log masuk

Penyata Terima

props: [&#39;msg&#39;],
  setup(props) {
    console.log(props);
  }
Salin selepas log masuk

Sediakan suntikan

Kadangkala, kita perlu menghantar data daripada komponen induk kepada komponen anak, tetapi Jika terdapat perhubungan yang sangat bersarang daripada komponen induk kepada komponen anak, menghantarnya melalui prop akan menjadi menyusahkan Dalam kes ini, kita boleh menggunakan menyediakan dan menyuntik untuk mencapainya.

  • Penggunaan Umum

Komponen akar menghantar data melalui penyediaan.

export default {
  data() {
    return {
    }
  },
  components: {
    Home
  },
  provide() {
    return {
      title: "app组件里面的标题"
    }
  }
}
Salin selepas log masuk

Komponen yang perlu menerima data boleh digunakan terus selepas menerimanya melalui pernyataan inject

export default {
  inject: [&#39;title&#39;],
  data() {
    return {
    }
  },
  components: {
  }
}
Salin selepas log masuk

Deklarasi.

<template>
  <div class="container">
    这是Location组件
    {{title}}
  </div>
</template>
Salin selepas log masuk
  • memberikan boleh mendapatkan data dalam ini

export default {
  data() {
    return {
      title: "根组件的数据"
    }
  },
  components: {
    Home
  },
  provide() {
    return {
      title: this.title
    }
  }
}
Salin selepas log masuk

Nota: Dalam penggunaan umum di atas, jika komponen induk Jika data subkomponen berubah, subkomponen tidak akan berubah Oleh itu, adalah disyorkan untuk menggunakan menyediakan dan menyuntik dalam API komposisi di bawah untuk mencapai perubahan segerak.

menyediakan dan menyuntik dalam persediaan

Komponen akar

import Home from &#39;./components/Home.vue&#39;
import {ref,provide} from &#39;vue&#39;
export default {
  setup() {
    let title = ref(&#39;app根组件里面的title&#39;);
    let setTitle = () => {
      title.value = "改变后的title"
    }
    provide("title",title);
    return {
      title,
      setTitle
    }
  },
  data() {
    return {
    }
  },
  components: {
    Home
  }
}
Salin selepas log masuk

Komponen yang menggunakan data

import {inject} from &#39;vue&#39;
export default {
  setup() {
    let title = inject(&#39;title&#39;);
    return {
      title
    }
  },
  data() {
    return {
    }
  },
  components: {
  }
}
Salin selepas log masuk

dan Perbezaannya dengan props ialah data dalam komponen anak akan disegerakkan kepada komponen induk jika pengikatan data dua hala digunakan.

Pembelajaran yang disyorkan: "Pilihan tutorial video 5 vue.js terkini"

Atas ialah kandungan terperinci Memperkenalkan API Komposisi dan penggunaan terasnya dalam Vue3. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:juejin.im
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan