最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3實(shí)現(xiàn)組件級(jí)基類的多種方法

 更新時(shí)間:2023年04月28日 08:37:15   作者:金色海洋(jyk)  
vue3提供了 mixins和extends,但是嘗試之后發(fā)現(xiàn)這兩種方法只支持純OptionAPI,設(shè)置的data會(huì)被識(shí)別,但是設(shè)置的setup里return 的 reactive,完全無(wú)效,setup也沒(méi)有被執(zhí)行,這篇文章主要介紹了Vue3實(shí)現(xiàn)組件級(jí)基類的幾種方法,需要的朋友可以參考下

Vue3的組件有三種代碼組織方式

  • 純Option API (不含setup)
  • option API + setup
  • 純 setup (即composition API)

對(duì)于這三種形式,設(shè)置基類的方法也略有不同。

使用 mixins、extends

vue3提供了 mixins和extends,但是嘗試之后發(fā)現(xiàn)這兩種方法只支持純OptionAPI,設(shè)置的data會(huì)被識(shí)別,但是設(shè)置的setup里return 的 reactive,完全無(wú)效,setup也沒(méi)有被執(zhí)行。
所以這種方式只能使用于第一種方式。

使用 hooks (function、class)

既然官方?jīng)]有提供,那么我們自己來(lái)想想辦法。我們先觀察一下組件的代碼(第二種情況):

<template>
  <!--模板-->
  舉例
</template>
<script lang="ts">
  import { defineComponent } from 'vue'
  export default defineComponent({
    name: 'ui-core-',
    components: {
      // 注冊(cè)共用組件
    },
    props: {
      // 定義共用屬性
    },
    setup(props, context) {
      // 各種共用操作
      _logger()
      _setTitle()
      // 共用成員
      const foo = reactive ({})
      return {
        foo
      }
    }
  })
</script>

defineComponent 方法接收一個(gè)對(duì)象,對(duì)象需要有特定的幾個(gè)屬性,比如name、components、props、setup等。
那么也就是說(shuō),我們可以做一個(gè)函數(shù)返回這樣的對(duì)象即可。
比如我們先建立一個(gè)js(或則ts)文件:

export function base (name, callback) {
  return {
    name: 'ui-' + name,
    components: {
      // 注冊(cè)共用組件
    },
    props: {
      // 定義共用屬性
    },
    setup(props, context) {
      // 各種共用操作
      _logger()
      _setTitle()
      // 共用成員
      const foo = reactive ({})
      // 執(zhí)行其他操作
      const re = callback(props, context)
      return {
        foo,
        ...re
      }
    }
  }
}

有點(diǎn)像模板模式。

傳入name和一個(gè)回調(diào)函數(shù),props, context作為參數(shù)進(jìn)行傳遞。內(nèi)部成員也可以作為參數(shù)傳遞。
這樣一個(gè)簡(jiǎn)單的基類就做成了,如果你覺(jué)得function不好看,那么可以換成class。

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()
      // 執(zhí)行其他操作
      const re = callback(props, context)
      return {
        ...re
      }
    }
  }
}

有了class之后,還可以設(shè)置子類,不過(guò)感覺(jué)有點(diǎn)繁瑣??傊?,反正可以實(shí)現(xiàn)就對(duì)了。

script setup怎么辦

上述這種方法應(yīng)該也是可以支持純composition API的,但是有點(diǎn)小問(wèn)題,defineProps 和 defineEmits 并不是普通 js 函數(shù),而是一種“宏”。
引用官網(wǎng)的解釋:

defineProps 和 defineEmits 都是只能在 <script setup> 中使用的編譯器宏。他們不需要導(dǎo)入,且會(huì)隨著 <script setup> 的處理過(guò)程一同被編譯掉。
也就是說(shuō) defineXXX系列 只有在 <script setup> 標(biāo)簽內(nèi)部才會(huì)被識(shí)別,如果在單獨(dú)的js文件里面,不會(huì)被識(shí)別。

這就導(dǎo)致 defineProps 和 defineEmits 無(wú)法做成基類的形式。
如果需要的基類不涉及 defineProps 和 defineEmits 的話,那么還是可以在單獨(dú)的js文件里面定義一個(gè)function或者class的,(即做一個(gè)綜合的hooks)。

如果涉及 defineProps 和 defineEmits,那么,我也沒(méi)想出來(lái)辦法。(只能第二種方式)

到此這篇關(guān)于Vue3實(shí)現(xiàn)組件級(jí)基類的幾種方法的文章就介紹到這了,更多相關(guān)Vue3組件級(jí)基類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue項(xiàng)目中自動(dòng)導(dǎo)入svg并愉快的使用方式

    vue項(xiàng)目中自動(dòng)導(dǎo)入svg并愉快的使用方式

    這篇文章主要介紹了vue項(xiàng)目中自動(dòng)導(dǎo)入svg并愉快的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 解決Vue2?axios發(fā)請(qǐng)求報(bào)400錯(cuò)誤"Error:?Request?failed?with?status?code?400"

    解決Vue2?axios發(fā)請(qǐng)求報(bào)400錯(cuò)誤"Error:?Request?failed?with?s

    這篇文章主要給大家介紹了關(guān)于如何解決Vue2?axios發(fā)請(qǐng)求報(bào)400錯(cuò)誤"Error:?Request?failed?with?status?code?400"的相關(guān)資料,在Vue應(yīng)用程序中我們通常會(huì)使用axios作為網(wǎng)絡(luò)請(qǐng)求庫(kù),需要的朋友可以參考下
    2023-07-07
  • vue實(shí)現(xiàn)可改變購(gòu)物數(shù)量的購(gòu)物車(chē)

    vue實(shí)現(xiàn)可改變購(gòu)物數(shù)量的購(gòu)物車(chē)

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)可改變購(gòu)物數(shù)量的購(gòu)物車(chē),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • vue3使用vue-router嵌套多級(jí)路由的方法

    vue3使用vue-router嵌套多級(jí)路由的方法

    Vue3 嵌套路由的使用和 Vue2 相差不大,主要的區(qū)別是 Vue3 的路由實(shí)例化使用了 createApp() 方法,所以實(shí)例化路由時(shí)需要傳入根組件,這篇文章主要介紹了vue3使用vue-router嵌套路由(多級(jí)路由),需要的朋友可以參考下
    2023-12-12
  • vue中v-for指令完成列表渲染

    vue中v-for指令完成列表渲染

    這篇文章主要給大家分享的是vue中v-for指令完成列表渲染,下面文化章就圍繞中v-for的相關(guān)資料在Vue中列表渲染做個(gè)簡(jiǎn)單總結(jié)和使用演示,需要的朋友可以參考一下,希望對(duì)大家有所幫助
    2021-11-11
  • VUE表達(dá)式{{}}中如何拼接字符

    VUE表達(dá)式{{}}中如何拼接字符

    這篇文章主要介紹了VUE表達(dá)式{{}}中如何拼接字符問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • vue-calendar-component日歷組件報(bào)錯(cuò)Clock is not defined解決

    vue-calendar-component日歷組件報(bào)錯(cuò)Clock is not defi

    這篇文章主要為大家介紹了vue-calendar-component日歷組件報(bào)錯(cuò)Clock is not defined解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Vue通知提醒框(Notification)圖文詳解

    Vue通知提醒框(Notification)圖文詳解

    最近有個(gè)項(xiàng)目需求就是在客戶端的右上角要實(shí)時(shí)展示提醒消息,下面這篇文章主要給大家介紹了關(guān)于Vue通知提醒框(Notification)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • Vue在css中圖片路徑問(wèn)題解決的配置方法

    Vue在css中圖片路徑問(wèn)題解決的配置方法

    這篇文章主要為大家介紹了Vue在css中圖片路徑問(wèn)題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Vue3封裝自定義指令的操作步驟

    Vue3封裝自定義指令的操作步驟

    在?Vue?3?中,封裝自定義指令可以幫助你更好地復(fù)用一些常見(jiàn)的DOM操作邏輯,自定義指令可以用于處理一些特定的用戶交互行為,本文給大家介紹了Vue3封裝自定義指令的示例,需要的朋友可以參考下
    2024-11-11

最新評(píng)論

台州市| 扬州市| 高陵县| 来宾市| 泊头市| 巍山| 永靖县| 观塘区| 鄂温| 永安市| 柳河县| 镇安县| 荆门市| 潞西市| 岳阳县| 集贤县| 浦北县| 阿鲁科尔沁旗| 闻喜县| 泾阳县| 奎屯市| 蓝山县| 阜南县| 运城市| 鹤岗市| 江津市| 喀喇沁旗| 岫岩| 甘德县| 广德县| 商河县| 左贡县| 乐都县| 祁阳县| 山阴县| 霍城县| 淮滨县| 潜江市| 奉节县| 长沙县| 锦州市|