亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Vue3?setup?的作用實(shí)例詳解

 更新時(shí)間:2022年12月29日 16:04:07   作者:清風(fēng)?與我  
setup?用來寫組合式?API,從生命周期的角度,相當(dāng)于取代了?beforeCreate(),這篇文章主要介紹了Vue3?setup?的作用,需要的朋友可以參考下

從 vue2 升級(jí) vue3,vue3 是可以兼容 vue2。所以 vue3 可以采用 vue2 的選項(xiàng)式 API,但是 vue2 不能使用 vue3 的組合式 API。

由于選項(xiàng)式 API 一個(gè)變量存在于多處,如果出現(xiàn)問題,就需要去涵蓋多個(gè)函數(shù)。項(xiàng)目越大,排查的難度也就越大。

setup 具體怎么用:

setup 用來寫組合式 API,從生命周期的角度,相當(dāng)于取代了 beforeCreate()

setup 的數(shù)據(jù)和方法如何使用?

1.setup(){} 內(nèi)部的屬性和方法,必須用 return 暴露出來。

將屬性掛載到實(shí)例上,否則沒有辦法使用。
語法糖:寫在 script 開始標(biāo)簽中,內(nèi)部的屬性和方法,無需 return 暴露;
無法和選項(xiàng)式 API 混用。

2.setup 內(nèi)部使用時(shí),沒有 this

3.鉤子函數(shù)可以和 setup 并列存在

4.setup 不能調(diào)用生命周期相關(guān)函數(shù),或者嵌套存在。

5.生命周期相關(guān)函數(shù)可以調(diào)用 setup 相關(guān)的屬性和方法

6.可以使用 this

setup 參數(shù)

使用 setup 時(shí),它將接收兩個(gè)參數(shù):props 和 context

props:

  • 表示父組件給子組件傳的數(shù)據(jù);
  • props是響應(yīng)式的,當(dāng)數(shù)據(jù)發(fā)生改變時(shí),自動(dòng)更新
  • 因?yàn)?props 是響應(yīng)式的,不能使用 Es6 的解構(gòu),如果使用會(huì)消除響應(yīng)式特性(使用 toRefs)

context:

上下文環(huán)境。其中包括了,屬性,插槽,自定義事件三個(gè)部分。

  • attrs:是一個(gè)非響應(yīng)式對(duì)象,主要接受 no-props(非props)屬性。經(jīng)常用來傳遞一些樣式/標(biāo)簽特有屬性。
  • slots:是一個(gè) Proxy 對(duì)象,其中 slots.default() 獲取到一個(gè)數(shù)組。數(shù)組長(zhǎng)度表示插槽的數(shù)量,數(shù)組中的元素是插槽的內(nèi)容。
  • emit:因?yàn)樵?setup 中沒有 this,所以使用 emit 來替換之前的 this.$emit(‘自定義事件名稱’,傳遞的值)。用于子傳父時(shí),自定義事件的觸發(fā)
  • 示例:emit(‘自定義事件名稱’,傳遞的值)

setup 特性總結(jié):

  • 這個(gè)函數(shù)會(huì)在 created 之前執(zhí)行。
  • setup 內(nèi)部沒有 this,不能掛載 this 相關(guān)的東西
  • setup 內(nèi)部的屬性和方法,必須 return 暴露出來。(語法糖中不需要)
  • setup 內(nèi)部的屬性都不是響應(yīng)式的;
  • setup 不能調(diào)用生命周期相關(guān)函數(shù),但生命周期相關(guān)函數(shù)可以調(diào)用 setup

setup 在代碼中的使用

<script>
import { onMounted, toRefs } from "vue";
export default {
  props: {
    msg: "abc",
  },
  setup(props, context) {
    let { msg } = toRefs(props);
    let { attrs, slots, emit } = context;
    console.log(props, context);
    let num = 10;
    return {
      num,
    };
    // 和setup,嵌套的生命周期
    // onMounted(() => {
    //   console.log("onMounted", num);
    // });
  },
  // 和setup,并列的生命周期
  mounted() {
    console.log("掛載后");
    console.log(this.$options);
  },
  data() {
    return {};
  },
  methods: {},
};
</script>

總結(jié):

以上就是 vue3 中 setup 的作用。

知識(shí)點(diǎn)擴(kuò)展:

Vue3中setup函數(shù)的作用與實(shí)現(xiàn)

  • setup函數(shù)是vue3新增組件選項(xiàng),其作用為

  • 配合組合式api,建立組合邏輯、創(chuàng)建響應(yīng)式數(shù)據(jù)、創(chuàng)建通用函數(shù),注冊(cè)生命周期鉤子的能力
  • setup函數(shù)只會(huì)在被掛載時(shí)執(zhí)行
  • setup返回值有兩種
  • 函數(shù)
  • 對(duì)象
  • 若為對(duì)象,則將對(duì)象包含的數(shù)據(jù)暴漏給模板使用
  • 在渲染組件的函數(shù)中從組件上取出setup,獲取其執(zhí)行的返回值,判斷其是否為函數(shù),并將其掛載到組件實(shí)例上
  • 若為函數(shù),則賦值給instance.render
  • 若為對(duì)象,則將其變成響應(yīng)式,并賦值給instance.setupState
export function setupComponent(instance){
    let { type,props,children}  = instance.vnode
    let {data,render,setup} = type
    //初始化屬性
    initProps(instance,props);
    instance.proxy = new Proxy(instance,instanceProxy);
    if(data){
        if(!isFunction(data)){
            return console.warn('The data option must be a function.')
        }
        //給實(shí)例賦予data屬性
        instance.data = reactive(data.call({}))
    }
    if(setup){
      //setup的第二個(gè)參數(shù),包含emit,attrs,slots等
      const context = {}
      const setupResult = setup(instance.props,context)
      if(isFunction(setupResult)){
        instance.render = setupResult
      }else if(isObject(setupResult)){
        instance.setupState = proxyRefs(setupResult)
      }
    }
    if(!instance.render){
      if(render){
      instance.render = render

      }else {
        //模板編譯
      }
    } 
}

同時(shí),instance的數(shù)據(jù)代理上做出對(duì)setupState的監(jiān)聽

const instanceProxy = {
    get(target,key){
        const { data,props,setupState} = target
        if(data && hasOwn(data,key)){
            return data[key]
        }else if(setupState && hasOwn(setupState,key)){
          return setupState[key]
        }
        else if(props && hasOwn(props,key)){
            return props[key]
        }
        let getter = publicProperties[key]
        if(getter){
            return getter(target)
        }
    },
    set(target,key,value,receiver){
        // debugger
        const {data,props,setupState} = target
        if(data && hasOwn(data,key)){
            data[key] = value
        }else if( setupState && hasOwn(setupState,key)){
            setupState[key]  = value
        }
        else if(props && hasOwn(props,key)){
            console.warn('props not update');
            return false
        }
        return true
    }
}

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

相關(guān)文章

  • 詳解vue-cli 腳手架 安裝

    詳解vue-cli 腳手架 安裝

    這篇文章主要介紹了vue-cli腳手架安裝,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • vue使用axios導(dǎo)出后臺(tái)返回的文件流為excel表格詳解

    vue使用axios導(dǎo)出后臺(tái)返回的文件流為excel表格詳解

    這篇文章主要介紹了vue使用axios導(dǎo)出后臺(tái)返回的文件流為excel表格方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue3使用Element-plus的el-pagination分頁組件時(shí)無法顯示中文

    vue3使用Element-plus的el-pagination分頁組件時(shí)無法顯示中文

    本文主要介紹了vue3使用Element-plus的el-pagination分頁組件時(shí)無法顯示中文,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • elementUI表格多選框this.$refs.xxx.toggleRowSelection無效問題

    elementUI表格多選框this.$refs.xxx.toggleRowSelection無效問題

    這篇文章主要介紹了elementUI表格多選框this.$refs.xxx.toggleRowSelection無效問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • vue-router子路由的實(shí)現(xiàn)方式

    vue-router子路由的實(shí)現(xiàn)方式

    這篇文章主要介紹了vue-router子路由的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • vue 動(dòng)態(tài)修改a標(biāo)簽的樣式的方法

    vue 動(dòng)態(tài)修改a標(biāo)簽的樣式的方法

    這篇文章主要介紹了vue 動(dòng)態(tài)修改a標(biāo)簽的樣式的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • Vue利用computed解決單項(xiàng)數(shù)據(jù)流的問題

    Vue利用computed解決單項(xiàng)數(shù)據(jù)流的問題

    Vue是一個(gè)非常流行和強(qiáng)大的前端框架,它讓我們可以用簡(jiǎn)潔和優(yōu)雅的方式來構(gòu)建用戶界面,但是,Vue也有一些需要注意和掌握的細(xì)節(jié)和技巧,今天我們來分享一個(gè)Vue中非常經(jīng)典的問題,也是一個(gè)非常實(shí)用的技巧,Vue利用computed解決單項(xiàng)數(shù)據(jù)流,需要的朋友可以參考下
    2023-08-08
  • Vue.js實(shí)現(xiàn)簡(jiǎn)單ToDoList 前期準(zhǔn)備(一)

    Vue.js實(shí)現(xiàn)簡(jiǎn)單ToDoList 前期準(zhǔn)備(一)

    這篇文章主要介紹了Vue.js實(shí)現(xiàn)簡(jiǎn)單ToDoList的前期準(zhǔn)備,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • vuejs簡(jiǎn)單驗(yàn)證碼功能完整示例

    vuejs簡(jiǎn)單驗(yàn)證碼功能完整示例

    這篇文章主要介紹了vuejs簡(jiǎn)單驗(yàn)證碼功能,結(jié)合完整實(shí)例形式分析了vue.js驗(yàn)證碼的生成、顯示、校驗(yàn)等相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • 使用vue3指令封裝一個(gè)圖片預(yù)覽功能

    使用vue3指令封裝一個(gè)圖片預(yù)覽功能

    這篇文章主要為大家詳細(xì)介紹了如何使用?vue3?指令封裝一個(gè)后臺(tái)管理系統(tǒng)圖片預(yù)覽功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01

最新評(píng)論