setup
Where is the function? We don’t know the name of its implementation function, so we asked ChatGPT:
ChatGPT tells me that the setup
function is in the packages/runtime-core/src/component.ts
file. As we all know, runtime-core
is the runtime core code of Vue3. Let's go in and take a look.
According to what it said, we found the setupComponent
and createComponentInstance
functions, but did not find the setupRenderEffect
function. ChatGPT only knows about 2021 Previous knowledge, Vue3 code has gone through a lot of changes, but it doesn't matter, this doesn't affect too much.
ChatGPT told me that the setupComponent
function is executed in the createComponentInstance
function. createComponentInstance
looks at the name to create a component instance. Take a look at the detailed code .
Copy directly to ChatGPT:
We read the code according to ChatGPT's explanation and found that createComponentInstance
just created an instance of the component and return. It does not execute setupComponent
in the function as it said above, stupid ChatGPT.
Then find out where setupComponent
is called.
You canpackages/runtime-core/
Search for the function name and you will find it quickly. In the mountComponent
function in the packages/runtime-core/src/renderer.ts
file.
mountComponent
is the method of mounting components. There is a bunch of custom renderer logic in front of it, which will not be discussed here.
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
The function first calls createComponentInstance
, returns a component instance, and then passes the instance as a parameter to setupComponent
. By the way, we also discovered the setupRenderEffect
function that ChatGPT lost here, which is used to handle some rendering side effects.
Back to the setupComponent
function, Evan’s comments tell us that it handles props and 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 }
Feed the code to ChatGPT:
setupComponent
In the function, after processing the props and slots, according to whether it is stateful The component called setupStatefulComponent
.
Directly feed the entire setupStatefulComponent
to ChatGPT:
handleSetupResult and
finishComponentSetup to return the rendering function. Let’s start with the rendering logic.
The above is the detailed content of How to let ChatGPT interpret Vue3 source code. For more information, please follow other related articles on the PHP Chinese website!