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

vue3中defineComponent?的作用詳解

 更新時(shí)間:2022年09月19日 14:59:38   作者:musicBird  
這篇文章主要介紹了vue3中defineComponent?的作用,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

vue3中,新增了 defineComponent ,它并沒有實(shí)現(xiàn)任何的邏輯,只是把接收的 Object 直接返回,它的存在是完全讓傳入的整個(gè)對(duì)象獲得對(duì)應(yīng)的類型,它的存在就是完全為了服務(wù) TypeScript 而存在的。

我都知道普通的組件就是一個(gè)普通的對(duì)象,既然是一個(gè)普通的對(duì)象,那自然就不會(huì)獲得自動(dòng)的提示,

import { defineComponent } from 'vue'
 
const component = {
  name: 'Home',
  props:{
    data: String,
  },
  setup // 沒有該有的提示,這非常的不友好
}
 
export default component

但是當(dāng)我們加上 defineComponent() 之后,就完全不一樣了,可以獲得自動(dòng)提示,vue2、vue3的自動(dòng)提示都有

import { defineComponent } from 'vue'

const component = {
  name: 'Home',
  props:{
    data: String,
  },
  setup(){
    // setup 可接受兩個(gè)參數(shù),一個(gè)props,和 context
  }
}

export default component

接下來看看 setup 中的兩個(gè)參數(shù) props 與 context ,
props指組件傳遞來的參數(shù),并且ts可以推論出props的類型.props也就是 vue2 中組件中的 props
context 有三個(gè)屬性 attrs slots emit 分別對(duì)應(yīng)vue2中的attrs屬性、slots插槽、$emit發(fā)送事件

import { defineComponent } from 'vue'

const component = {
  name: 'Home',
  props:{
    data: String,
  },
  setup(props, context){
    // props.data
    // context.attrs    context.slots    context.emit 
  }
}

export default component

擴(kuò)展知識(shí):

vue3之組件結(jié)構(gòu)(defineComponent,setup函數(shù))

在vue3中,對(duì)組件整體結(jié)構(gòu)做一些調(diào)整,先看一個(gè)組件案例:

import {ref, reactive, defineComponent, Ref, onMounted} from "vue";
import {settingsStore} from "/@/store/module/settings";
import {IRoleList} from "/@/interface/role/list.interface";
import {IHttpResult} from "/@/interface/common.interface";
import { ILogListParams } from "/@/interface/settings/log.interface";
export default defineComponent({
   name: "LogList",
   setup() {
       const logList: Ref<IRoleList[]> = ref([]);
       const columns = [
       	...
       ];

       const pagination = ref({
            "show-quick-jumper": true,
            total: 100,
            current: 1,
            "show-size-changer": true,
            "show-total": (total: number, range: number[]) => `${range[0]}-${range[1]} 共 ${total} 條`,
            "pageSize": 10
       });
       const columnsList = ref(columns);
       const params: ILogListParams = reactive({
           page: 1,
           pageSize: 10
       });

       onMounted(() => {
           findLogList();
       });
       /*查詢?nèi)罩玖斜?/
       const findLogList = () => {
           settingsStore.findLogList(params).then((res: IHttpResult) => {
               const data = res.data;
               pagination.value.total = data.total;
               logList.value = data.list;
           });
       };
       /*修改狀態(tài)*/
       const onChange = (pagination: {current: number, pageSize: number}) => {
           params.page = pagination.current;
           params.pageSize = pagination.pageSize;
       };
       /*刪除*/
       const onDelete = (id: number) => {
           alert(id);
       };
      return {
          columnsList,
          logList,
          onDelete,
          onChange,
          pagination
      };
   }
});

從上面組件代碼中,可以看出在vue3中沒有this對(duì)象, 所有的邏輯代碼都寫在setup方法里面.
若是要在HTML模板頁(yè)面中使用變量或者方法, 需要在setup方法return出去.

setup是Vue3 的一大特性函數(shù), 它有幾個(gè)特性:

1、setup函數(shù)是處于 生命周期函數(shù) beforeCreate 和 Created 兩個(gè)鉤子函數(shù)之間的函數(shù)

2、setup函數(shù)是 Composition API(組合API)的入口

3、在setup函數(shù)中定義的變量和方法最后都是需要 return 出去的 不然無法再模板中使用

setup函數(shù)的注意點(diǎn):

vue3雖然支持vue2.x版本的寫法,但也有一些要注意的地方

1、由于在執(zhí)行 setup函數(shù)的時(shí)候,還沒有執(zhí)行 Created 生命周期方法,所以在 setup 函數(shù)中,無法使用 data 和 methods 的變量和方法

2、由于我們不能在 setup函數(shù)中使用 data 和 methods,所以 Vue 為了避免我們錯(cuò)誤的使用,直接將 setup函數(shù)中的this修改成了 undefined

3、setup函數(shù)只能是同步的不能是異步的

  • 上面的組件中用defineComponent包裹了組件;
  • defineComponent函數(shù),只是對(duì)setup函數(shù)進(jìn)行封裝,返回options的對(duì)象;
  • defineComponent最重要的是:在TypeScript下,給予了組件 正確的參數(shù)類型推斷 。

defineComponent部分源碼

  • defineComponent可以給組件的setup方法準(zhǔn)確的參數(shù)類型定義.
  • defineComponent 可以接受顯式的自定義 props 接口或從屬性驗(yàn)證對(duì)象中自動(dòng)推斷
  • defineComponent 可以正確適配無 props、數(shù)組 props 等形式
  • 引入 defineComponent() 以正確推斷 setup() 組件的參數(shù)類型

到此這篇關(guān)于vue3中defineComponent 的作用的文章就介紹到這了,更多相關(guān)vue3 defineComponent 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue3+el-select實(shí)現(xiàn)觸底加載更多功能(ts版)

    vue3+el-select實(shí)現(xiàn)觸底加載更多功能(ts版)

    這篇文章主要給大家介紹了基于vue3和el-select實(shí)現(xiàn)觸底加載更多功能,文中有詳細(xì)的代碼示例,感興趣的同學(xué)可以借鑒參考下
    2023-07-07
  • vue封裝el-upload批量上傳只請(qǐng)求一次接口

    vue封裝el-upload批量上傳只請(qǐng)求一次接口

    本文主要介紹了vue封裝el-upload批量上傳只請(qǐng)求一次接口,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Vue組件公用方法提取mixin實(shí)現(xiàn)

    Vue組件公用方法提取mixin實(shí)現(xiàn)

    這篇文章主要介紹了Vue組件公用方法提取mixin實(shí)現(xiàn),多個(gè)組件共用一個(gè)方法時(shí)可以用?mixin?抽取到一個(gè)js文件中,作為共用方法,下面一起進(jìn)入文章了解更多詳細(xì)內(nèi)容吧
    2022-03-03
  • Vue+Element實(shí)現(xiàn)動(dòng)態(tài)生成新表單并添加驗(yàn)證功能

    Vue+Element實(shí)現(xiàn)動(dòng)態(tài)生成新表單并添加驗(yàn)證功能

    這篇文章主要介紹了Vue+Element實(shí)現(xiàn)動(dòng)態(tài)生成新表單并添加驗(yàn)證功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • 在Vue中使用Viser說明(基于AntV-G2可視化引擎)

    在Vue中使用Viser說明(基于AntV-G2可視化引擎)

    這篇文章主要介紹了在Vue中使用Viser說明(基于AntV-G2可視化引擎),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • vue實(shí)現(xiàn)將數(shù)據(jù)存入vuex中以及從vuex中取出數(shù)據(jù)

    vue實(shí)現(xiàn)將數(shù)據(jù)存入vuex中以及從vuex中取出數(shù)據(jù)

    今天小編就為大家分享一篇vue實(shí)現(xiàn)將數(shù)據(jù)存入vuex中以及從vuex中取出數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Vue3?中自定義插件的實(shí)現(xiàn)方法

    Vue3?中自定義插件的實(shí)現(xiàn)方法

    在 Vue 中,一些簡(jiǎn)單的功能,我們可以直接定義為全局方法,然后掛到 Vue 上就能使用了,這篇文章主要介紹了Vue3?中自定義插件的實(shí)現(xiàn),需要的朋友可以參考下
    2022-08-08
  • Vue自嵌套樹組件使用方法詳解

    Vue自嵌套樹組件使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了Vue自嵌套樹組件的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 關(guān)于vue-admin-template模板連接后端改造登錄功能

    關(guān)于vue-admin-template模板連接后端改造登錄功能

    這篇文章主要介紹了關(guān)于vue-admin-template模板連接后端改造登錄功能,登陸方法根據(jù)賬號(hào)密碼查出用戶信息,根據(jù)用戶id與name生成token并返回,userinfo則是對(duì)token進(jìn)行獲取,在查出對(duì)應(yīng)值進(jìn)行返回,感興趣的朋友一起看看吧
    2022-05-05
  • vue中如何實(shí)時(shí)監(jiān)聽本地存儲(chǔ)

    vue中如何實(shí)時(shí)監(jiān)聽本地存儲(chǔ)

    這篇文章主要介紹了vue中如何實(shí)時(shí)監(jiān)聽本地存儲(chǔ),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04

最新評(píng)論

林口县| 哈密市| 大关县| 云梦县| 漳浦县| 洪湖市| 武隆县| 河东区| 遂宁市| 砚山县| 竹溪县| 安化县| 天门市| 新野县| 宁都县| 化州市| 南郑县| 乌苏市| 湟源县| 绥芬河市| 沭阳县| 吴忠市| 枣强县| 建平县| 靖西县| 息烽县| 荣成市| 天祝| 新密市| 芜湖市| 盐亭县| 嘉祥县| 南通市| 新源县| 定兴县| 陈巴尔虎旗| 望谟县| 京山县| 天峨县| 修武县| 类乌齐县|