国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

讓ChatGPT解讀Vue3源碼過程解析

瀏覽:52日期:2022-06-01 18:25:52
目錄
  • 前言
  • 實戰
    • setup
    • 小結
  • 總結

    前言

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

    都知道 Vue3 組件有一個 setup函數。那么它內部做了什么呢,今天跟隨 ChatGPT 來一探究竟。

    實戰

    setup

    setup 函數在什么位置呢,我們不知道他的實現函數名稱,于是問一下 ChatGPT:

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

    按照它所說的,我們找到了 setupComponentcreateComponentInstance 函數,并沒有找到 setupRenderEffect 函數,ChatGPT 的只知道 2021 年以前的知識,Vue3 代碼經過了很多變動,不過沒關系,這不影響太多。

    ChatGPT 告訴我,setupComponent 函數是在createComponentInstance函數中執行的,createComponentInstance看名字是創建組件實例,看一下詳細代碼。

    直接復制給 ChatGPT:

    我們根據 ChatGPT 的解釋來閱讀代碼,發現createComponentInstance只是創建了組件的實例并返回。并沒有像它上面說的在函數中執行了 setupComponent,笨笨的 ChatGPT。

    那就自己找一下setupComponent是在哪里被調用的。

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

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

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

    mountComponent函數先調用了createComponentInstance, 返回個組件實例,又把實例當作參數傳給了 setupComponent。順便我們還在這發現了 ChatGPT 搞丟的setupRenderEffect函數,它是用來處理一些渲染副作用的。

    回到 setupComponent函數,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 函數中,處理完 props 和 slots 后,根據是否是有狀態組件調用了setupStatefulComponent。

    直接整個 setupStatefulComponent喂給 ChatGPT:

    太長了,大概意思:

    • 創建了代理緩存accessCache,干嘛用的咱也不知道,可以問 ChatGPT
    • 創建公共實例代理對象(proxy)
    • 執行組件的 setup()

    后續操作是調用 handleSetupResultfinishComponentSetup 返回渲染函數。開始走渲染邏輯了。

    小結

    小結一下setup的始末:

    • 從組件掛載開始調用createComponentInstance創建組件實例
    • 傳遞組件實例給setupComponent
    • setupComponent內部初始化 props 和 slots
    • setupStatefulComponent 執行組件的setup
    • 完成 setup 流程
    • 返回渲染函數
    • ...

    總結

    ChatGPT 很強大,也很笨,畢竟它不聯網,且只有 2021 年以前的數據??捎脕韼椭覀冏x一下晦澀的源碼還是可以的,但也只能輔助作用,還需要自己的思考。

    以上就是讓ChatGPT解讀Vue3源碼過程解析的詳細內容,更多關于ChatGPT讀Vue3源碼的資料請關注其它相關文章!

    標簽: JavaScript
    主站蜘蛛池模板: 精品9e精品视频在线观看 | 精品国产一二三区 | 亚洲国产精品免费 | 日本加勒比视频 | 爽爽窝窝午夜精品一区二区 | 亚洲爽爽 | 91久久线看在观草草青青 | 亚洲 欧美 精品 中文第三 | 国产精品成人观看视频网站 | 87精品福利视频在线观看 | 免费观看a级毛片在线播放 免费观看a级网站 | 欧美亚洲日本一区二区三区浪人 | 国产欧美一区二区三区在线 | 国产精品久久久免费视频 | a级片在线免费看 | 国产成人综合欧美精品久久 | 国产一区视频在线 | 国内一级特黄女人精品片 | 丝袜精品 欧美 亚洲 自拍 | 自拍视频啪| 视频精品一区二区 | 欧美一级毛片欧美一级 | 米奇精品一区二区三区 | 国产成人18黄网站免费网站 | 国产美女野外做爰 | 亚洲线精品一区二区三区 | 久久免费香蕉视频 | 欧美日韩视频二区三区 | 全免费a级毛片免费毛视频 全午夜免费一级毛片 | 免费的成人a视频在线观看 免费的毛片 | 欧美三级久久 | 手机看片1024欧美日韩你懂的 | 日本www高清免费视频观看 | 免费观看三级毛片 | 一个人的视频日本免费 | 中文字幕在线欧美 | 玖玖视频精品 | 中国人免费观看高清在线观看二区 | aaa一级毛片 | 日本人的色道免费网站 | 欧美日韩一区二区三区视频在线观看 |