Rumah > hujung hadapan web > View.js > Bagaimana untuk melaksanakan kelas asas peringkat komponen dalam Vue3

Bagaimana untuk melaksanakan kelas asas peringkat komponen dalam Vue3

PHPz
Lepaskan: 2023-05-23 15:19:49
ke hadapan
1287 orang telah melayarinya

Gunakan mixin dan extends

vue3 menyediakan mixin dan extends, tetapi selepas mencubanya, saya mendapati bahawa kedua-dua kaedah ini hanya menyokong OptionAPI tulen Data set akan dikenali, tetapi reaktif pulangan dalam set persediaan tidak sah sepenuhnya, persediaan tidak dilaksanakan.
Jadi kaedah ini hanya boleh digunakan dalam kaedah pertama.

Gunakan cangkuk (fungsi, kelas)

Memandangkan ia tidak disediakan secara rasmi, mari kita fikirkan sendiri. Mari kita perhatikan kod komponen (huruf kedua):

<template>
  <!--模板-->
  举例
</template>
<script lang="ts">
  import { defineComponent } from &#39;vue&#39;
  export default defineComponent({
    name: &#39;ui-core-&#39;,
    components: {
      // 注册共用组件
    },
    props: {
      // 定义共用属性
    },
    setup(props, context) {
      // 各种共用操作
      _logger()
      _setTitle()
      // 共用成员
      const foo = reactive ({})
      return {
        foo
      }
    }
  })
</script>
Salin selepas log masuk

kaedah defineComponent menerima objek dan objek itu perlu mempunyai beberapa atribut khusus, seperti nama, komponen, prop, persediaan, dsb.
Dengan kata lain, kita boleh membuat fungsi untuk mengembalikan objek sedemikian.
Sebagai contoh, mari buat fail js (atau ts) dahulu:

export function base (name, callback) {
  return {
    name: &#39;ui-&#39; + name,
    components: {
      // 注册共用组件
    },
    props: {
      // 定义共用属性
    },
    setup(props, context) {
      // 各种共用操作
      _logger()
      _setTitle()
      // 共用成员
      const foo = reactive ({})
      // 执行其他操作
      const re = callback(props, context)
      return {
        foo,
        ...re
      }
    }
  }
}
Salin selepas log masuk

Ia agak seperti mod templat.

Masukkan nama dan fungsi panggil balik, prop dan konteks sebagai parameter. Ahli dalaman juga boleh diluluskan sebagai parameter.
Kelas asas sebegitu mudah dicipta Jika anda rasa fungsi itu tidak cantik, anda boleh menukarnya kepada kelas.

export default class BaseComponent {
  name: string
  components: any
  props: any
  setup: any
  constructor (name: string, callback: (props: any, context: any) => any) {
    this.name = name
    this.components = {}
    this.props = {}
    this.setup = (props: any, context: any) => {
      // 各种共用操作
      _logger()
      _setTitle()
      // 执行其他操作
      const re = callback(props, context)
      return {
        ...re
      }
    }
  }
}
Salin selepas log masuk

Selepas mengadakan kelas, anda juga boleh menetapkan subkelas, tetapi ia terasa agak menyusahkan. Pendek kata, ia boleh dicapai pula.

Apa yang perlu dilakukan dengan persediaan skrip

Kaedah di atas juga harus menyokong API komposisi tulen, tetapi terdapat sedikit masalah defineProps dan defineEmits bukan fungsi js biasa, tetapi sejenis "makro " .
Memetik penjelasan daripada laman web rasmi:

defineProps dan defineEmits ialah makro pengkompil yang hanya boleh digunakan dalam . Ia tidak perlu diimport dan akan disusun bersama-sama dengan
Maksudnya, siri defineXXX hanya akan dikenali di dalam teg

Ini menyebabkan defineProps dan defineEmits tidak dapat dijadikan kelas asas.
Jika kelas asas yang diperlukan tidak melibatkan defineProps dan defineEmits, anda masih boleh mentakrifkan fungsi atau kelas dalam fail js yang berasingan (iaitu, membuat cangkuk komprehensif).

Saya masih belum mengetahui cara untuk mendefineProps dan defineEmits. (Hanya cara kedua)

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan kelas asas peringkat komponen dalam Vue3. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
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