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

Vue3?setup?的作用實例詳解

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

從 vue2 升級 vue3,vue3 是可以兼容 vue2。所以 vue3 可以采用 vue2 的選項式 API,但是 vue2 不能使用 vue3 的組合式 API。

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

setup 具體怎么用:

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

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

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

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

2.setup 內(nèi)部使用時,沒有 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ù):props 和 context

props:

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

context:

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

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

setup 特性總結(jié):

  • 這個函數(shù)會在 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 的作用。

知識點擴(kuò)展:

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

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

  • 配合組合式api,建立組合邏輯、創(chuàng)建響應(yīng)式數(shù)據(jù)、創(chuàng)建通用函數(shù),注冊生命周期鉤子的能力
  • setup函數(shù)只會在被掛載時執(zhí)行
  • setup返回值有兩種
  • 函數(shù)
  • 對象
  • 若為對象,則將對象包含的數(shù)據(jù)暴漏給模板使用
  • 在渲染組件的函數(shù)中從組件上取出setup,獲取其執(zhí)行的返回值,判斷其是否為函數(shù),并將其掛載到組件實例上
  • 若為函數(shù),則賦值給instance.render
  • 若為對象,則將其變成響應(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.')
        }
        //給實例賦予data屬性
        instance.data = reactive(data.call({}))
    }
    if(setup){
      //setup的第二個參數(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 {
        //模板編譯
      }
    } 
}

同時,instance的數(shù)據(jù)代理上做出對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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue頁面批量引入組件的操作代碼

    vue頁面批量引入組件的操作代碼

    這篇文章主要介紹了vue頁面批量引入組件,本文結(jié)合示例代碼給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • vue嵌入第三方頁面幾種常見方法

    vue嵌入第三方頁面幾種常見方法

    在Vue中嵌入第三方頁面可以采用多種方法,例如使用<iframe>、Vue插件、動態(tài)加載第三方腳本或WebComponents,不同方法適用于不同類型的內(nèi)容和項目需求,如<iframe>適用于整個網(wǎng)頁,而動態(tài)腳本和WebComponents適合特定功能,選擇合適的方法可以有效整合外部資源
    2024-09-09
  • VUE2.0中Jsonp的使用方法

    VUE2.0中Jsonp的使用方法

    使用JSONP主要是目的通過動態(tài)創(chuàng)建Script,動態(tài)拼接url,進(jìn)而抓取數(shù)據(jù),實現(xiàn)跨域。這篇文章主要介紹了VUE2.0中Jsonp的使用方法(前端),需要的朋友可以參考下
    2018-05-05
  • 一文帶你掌握Vue中的路由守衛(wèi)

    一文帶你掌握Vue中的路由守衛(wèi)

    路由守衛(wèi)(Route?Guards)是?Vue?Router?的一個功能,它允許我們在路由發(fā)生之前執(zhí)行邏輯判斷,這篇文章主要為大家介紹了Vue中路由守衛(wèi)的具體應(yīng)用,需要的可以了解下
    2024-03-03
  • vue3+ts代理的使用

    vue3+ts代理的使用

    本文主要介紹了vue3+ts代理的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • vue項目啟動時無法識別es6的擴(kuò)展語法的解決

    vue項目啟動時無法識別es6的擴(kuò)展語法的解決

    啟動項目時遇到ES6的拓展運(yùn)算符報錯可以通過切換到淘寶鏡像,以及在項目根目錄下新增.babelrc和postcss.config.js文件來解決,這些操作有助于正確配置項目環(huán)境,從而避免報錯,并保證項目的順利運(yùn)行,希望這些經(jīng)驗?zāi)軌驇椭接龅较嗤瑔栴}的開發(fā)者
    2024-10-10
  • 淺析vue-router中params和query的區(qū)別

    淺析vue-router中params和query的區(qū)別

    這篇文章主要介紹了vue-router中params和query的區(qū)別,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • 基于axios請求封裝的vue應(yīng)用實例代碼

    基于axios請求封裝的vue應(yīng)用實例代碼

    這篇文章主要給大家介紹了基于axios請求封裝的vue應(yīng)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Vue $emit $refs子父組件間方法的調(diào)用實例

    Vue $emit $refs子父組件間方法的調(diào)用實例

    今天小編就為大家分享一篇Vue $emit $refs子父組件間方法的調(diào)用實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue3+echarts+折線投影(陰影)效果的實現(xiàn)

    vue3+echarts+折線投影(陰影)效果的實現(xiàn)

    這篇文章主要介紹了vue3+echarts+折線投影(陰影)效果的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10

最新評論

天峻县| 子洲县| 淮安市| 陆河县| 曲沃县| 张家港市| 延安市| 新巴尔虎左旗| 文安县| 衡东县| 临湘市| 徐闻县| 婺源县| 伊金霍洛旗| 利川市| 高淳县| 卢湾区| 繁昌县| 循化| 葫芦岛市| 普安县| 安阳县| 宝山区| 虞城县| 忻城县| 延边| 平和县| 读书| 南雄市| 尉犁县| 汝阳县| 保山市| 彩票| 宣化县| 贵溪市| 龙川县| 盐津县| 台前县| 富裕县| 蚌埠市| 卓尼县|