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

讓ChatGPT解讀Vue3源碼過(guò)程解析

 更新時(shí)間:2023年02月24日 08:25:43   作者:李瑞豐_liruifengv  
這篇文章主要為大家介紹了讓ChatGPT解讀Vue3源碼過(guò)程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

ChatGPT 最近十分火爆,今天我也來(lái)讓 ChatGPT 幫我閱讀一下 Vue3 的源代碼。

都知道 Vue3 組件有一個(gè) setup函數(shù)。那么它內(nèi)部做了什么呢,今天跟隨 ChatGPT 來(lái)一探究竟。

實(shí)戰(zhàn)

setup

setup 函數(shù)在什么位置呢,我們不知道他的實(shí)現(xiàn)函數(shù)名稱(chēng),于是問(wèn)一下 ChatGPT:

ChatGPT 告訴我,setup 函數(shù)在packages/runtime-core/src/component.ts 文件中。眾所周知,runtime-core是 Vue3 的運(yùn)行時(shí)核心代碼。我們進(jìn)去看一眼。

按照它所說(shuō)的,我們找到了 setupComponentcreateComponentInstance 函數(shù),并沒(méi)有找到 setupRenderEffect 函數(shù),ChatGPT 的只知道 2021 年以前的知識(shí),Vue3 代碼經(jīng)過(guò)了很多變動(dòng),不過(guò)沒(méi)關(guān)系,這不影響太多。

ChatGPT 告訴我,setupComponent 函數(shù)是在createComponentInstance函數(shù)中執(zhí)行的,createComponentInstance看名字是創(chuàng)建組件實(shí)例,看一下詳細(xì)代碼。

直接復(fù)制給 ChatGPT:

我們根據(jù) ChatGPT 的解釋來(lái)閱讀代碼,發(fā)現(xiàn)createComponentInstance只是創(chuàng)建了組件的實(shí)例并返回。并沒(méi)有像它上面說(shuō)的在函數(shù)中執(zhí)行了 setupComponent,笨笨的 ChatGPT。

那就自己找一下setupComponent是在哪里被調(diào)用的。

可以packages/runtime-core/搜一下函數(shù)名,很快就找到了。在packages/runtime-core/src/renderer.ts文件中的mountComponent函數(shù)中。

mountComponent 是掛載組件的方法,前面還有一堆自定義渲染器的邏輯,不在此篇展開(kāi)。

  const mountComponent: MountComponentFn = (...args) => {
    const instance: ComponentInternalInstance =
      compatMountInstance ||
      (initialVNode.component = createComponentInstance(
        initialVNode,
        parentComponent,
        parentSuspense
      ))
    // ... 省略代碼
    // resolve props and slots for setup context
    if (!(__COMPAT__ && compatMountInstance)) {
        // ...這里調(diào)用了setupComponent,傳入了實(shí)例,還寫(xiě)了注釋?zhuān)腥?
      setupComponent(instance)
    }
    // setupRenderEffect 居然也在這
    setupRenderEffect(
      instance,
      initialVNode,
      container,
      anchor,
      parentSuspense,
      isSVG,
      optimized
    )
  }

mountComponent函數(shù)先調(diào)用了createComponentInstance, 返回個(gè)組件實(shí)例,又把實(shí)例當(dāng)作參數(shù)傳給了 setupComponent。順便我們還在這發(fā)現(xiàn)了 ChatGPT 搞丟的setupRenderEffect函數(shù),它是用來(lái)處理一些渲染副作用的。

回到 setupComponent函數(shù),Evan 的注釋告訴我們它是處理 props 和 slots 的。

export function setupComponent(
  instance: ComponentInternalInstance,
  isSSR = false
) {
  isInSSRComponentSetup = isSSR
  const { props, children } = instance.vnode
  const isStateful = isStatefulComponent(instance)
  initProps(instance, props, isStateful, isSSR)
  initSlots(instance, children)
  const setupResult = isStateful
    ? setupStatefulComponent(instance, isSSR)
    : undefined
  isInSSRComponentSetup = false
  return setupResult
}

把代碼喂給 ChatGPT:

setupComponent 函數(shù)中,處理完 props 和 slots 后,根據(jù)是否是有狀態(tài)組件調(diào)用了setupStatefulComponent。

直接整個(gè) setupStatefulComponent喂給 ChatGPT:

太長(zhǎng)了,大概意思:

  • 創(chuàng)建了代理緩存accessCache,干嘛用的咱也不知道,可以問(wèn) ChatGPT
  • 創(chuàng)建公共實(shí)例代理對(duì)象(proxy)
  • 執(zhí)行組件的 setup()

后續(xù)操作是調(diào)用 handleSetupResultfinishComponentSetup 返回渲染函數(shù)。開(kāi)始走渲染邏輯了。

小結(jié)

小結(jié)一下setup的始末:

  • 從組件掛載開(kāi)始調(diào)用createComponentInstance創(chuàng)建組件實(shí)例
  • 傳遞組件實(shí)例給setupComponent
  • setupComponent內(nèi)部初始化 props 和 slots
  • setupStatefulComponent 執(zhí)行組件的setup
  • 完成 setup 流程
  • 返回渲染函數(shù)
  • ...

總結(jié)

ChatGPT 很強(qiáng)大,也很笨,畢竟它不聯(lián)網(wǎng),且只有 2021 年以前的數(shù)據(jù)??捎脕?lái)幫助我們讀一下晦澀的源碼還是可以的,但也只能輔助作用,還需要自己的思考。

以上就是讓ChatGPT解讀Vue3源碼過(guò)程解析的詳細(xì)內(nèi)容,更多關(guān)于ChatGPT讀Vue3源碼的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue3中使用Supabase?Auth方法詳解

    Vue3中使用Supabase?Auth方法詳解

    這篇文章主要為大家介紹了Vue3中使用Supabase?Auth方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Pinia入門(mén)學(xué)習(xí)之實(shí)現(xiàn)簡(jiǎn)單的用戶(hù)狀態(tài)管理

    Pinia入門(mén)學(xué)習(xí)之實(shí)現(xiàn)簡(jiǎn)單的用戶(hù)狀態(tài)管理

    Vue3雖然相對(duì)于Vue2很多東西都變了,但是核心的東西還是沒(méi)有變,比如說(shuō)狀態(tài)管理、路由等,再Vue3中尤大神推薦我們使用pinia來(lái)實(shí)現(xiàn)狀態(tài)管理,他也說(shuō)pinia就是Vuex的新版本,這篇文章主要給大家介紹了關(guān)于Pinia入門(mén)學(xué)習(xí)之實(shí)現(xiàn)簡(jiǎn)單的用戶(hù)狀態(tài)管理的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • Vue組件之單向數(shù)據(jù)流的解決方法

    Vue組件之單向數(shù)據(jù)流的解決方法

    這篇文章主要介紹了Vue組件之單向數(shù)據(jù)流的解決方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • vuex獲取state對(duì)象中值的所有方法小結(jié)(module中的state)

    vuex獲取state對(duì)象中值的所有方法小結(jié)(module中的state)

    這篇文章主要介紹了vuex獲取state對(duì)象中值的所有方法小結(jié)(module中的state),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Antd下拉選擇,自動(dòng)匹配功能的實(shí)現(xiàn)

    Antd下拉選擇,自動(dòng)匹配功能的實(shí)現(xiàn)

    這篇文章主要介紹了Antd下拉選擇,自動(dòng)匹配功能的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • 一文詳解怎么安裝離線vue環(huán)境

    一文詳解怎么安裝離線vue環(huán)境

    這篇文章主要給大家介紹了關(guān)于怎么安裝離線vue環(huán)境的相關(guān)資料,由于公司要求在內(nèi)網(wǎng)開(kāi)發(fā)項(xiàng)目,而內(nèi)網(wǎng)不能連接外網(wǎng),因此只能離線安裝vue環(huán)境,需要的朋友可以參考下
    2023-12-12
  • 基于ElementUI中Table嵌套實(shí)現(xiàn)多選的示例代碼

    基于ElementUI中Table嵌套實(shí)現(xiàn)多選的示例代碼

    這篇文章主要介紹了基于ElementUI中Table嵌套實(shí)現(xiàn)多選的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • VUE+Canvas實(shí)現(xiàn)簡(jiǎn)單五子棋游戲的全過(guò)程

    VUE+Canvas實(shí)現(xiàn)簡(jiǎn)單五子棋游戲的全過(guò)程

    這篇文章主要給大家介紹了關(guān)于VUE+Canvas實(shí)現(xiàn)簡(jiǎn)單五子棋游戲的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Vue中靈活拖拽的前端神器VueDraggablePlus的用法詳解

    Vue中靈活拖拽的前端神器VueDraggablePlus的用法詳解

    這篇文章主要介紹了一款功能強(qiáng)大、靈活易用的前端組件VueDraggablePlus,作為前端工程師,我們經(jīng)常會(huì)遇到需要實(shí)現(xiàn)拖拽功能的場(chǎng)景,而VueDraggablePlus正是為了解決這一痛點(diǎn)而誕生的,讓我們一起來(lái)看看它的特點(diǎn)和用法吧
    2024-03-03
  • Vue進(jìn)階之利用transition標(biāo)簽實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)動(dòng)畫(huà)

    Vue進(jìn)階之利用transition標(biāo)簽實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)動(dòng)畫(huà)

    這篇文章主要為大家詳細(xì)介紹了Vue如何利用transition標(biāo)簽實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)動(dòng)畫(huà),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起一下
    2023-08-08

最新評(píng)論

饶平县| 乐东| 堆龙德庆县| 项城市| 荆州市| 泽州县| 肥西县| 晋宁县| 怀柔区| 原阳县| 永兴县| 鸡西市| 莒南县| 泗洪县| 武川县| 上饶县| 成都市| 成都市| 旅游| 洛浦县| 广元市| 萍乡市| 交城县| 忻城县| 商河县| 海宁市| 广宁县| 上高县| 五河县| 德化县| 会同县| 高雄县| 麦盖提县| 丹阳市| 潜山县| 富锦市| 贵溪市| 杭锦后旗| 万载县| 民和| 阳西县|