createVNode->render(vnode"/> createVNode->render(vnode">
search
HomeWeb Front-endVue.jsHow to call functions during Vue3 initialization

Vue3 initialization call function

createApp({}).mount(‘#app')

Entry file runtime-dom/src/index.tx

  • ##createApp -> createRenderer -> createBaseRenderer (also created here render function and a series of rendering functions) -> createAppAPI (returns the real createApp method), returns the instance app,

  • and then app.mount("#app" ) -> createVNode -> render(vnode,rootcontainier,isSVG) -> patch -> processComponent -> mountComponent (initial rendering) or updateComponent ->(createComponentInstance, setupComponent,setupRenderEffect)

  • For setupComponent, whether there is a setup function or not, it will be handled separately. If there is, use the setup function to handle it. Initialize props and other parameters that need to be passed to the setup function. Call setup, setupComponent->finishComponentSetup (in This will handle the options initialization of version 2.x),

  • For setupRenderEffect, execute a series of life hook functions, create rendering ReactiveEffect, and execute **effect.run()* *Method

ReactiveEffect

is similar to vue2.x’s Watcher, computed, watch, componentUpdateFn also uses ReactiveEffect during the rendering process,

const effect = new ReactiveEffect(fn,…), in addition to the calculated attribute, effect.run() will be called when it is accessed ->Call fn(), access the responsive variable in fn, and collect Dependencies, the rest of setupRenderEffect, watch, watchEffect, will call effect.run() after creating ReactiveEffect to collect dependencies, among which

  • ##setupRenderEffect

    will access the dependent response Variable

  • watch(source,cb,options)

    will execute the function that accesses the source and collects dependencies

  • watchEffect(fn)

    , will automatically execute fn to collect dependencies

  • ##effect(fn, options)
  • , where options has a lazy:true option , indicating not to execute the fn function immediately to collect dependencies, return a run function, call run() again, execute the fn function once, and collect dependencies

    // 1.计算属性
    // computed.ts
    // ComputedRefImpl类构造函数调用了new ReactiveEffect
    this.effect = new ReactiveEffect(getter, () => {
          if (!this._dirty) {
            this._dirty = true
            triggerRefValue(this)
          }
        })
        
    // 2. effect
    // effect.ts
    // effect函数中,可以接收第二个参数effect(fn,{lazy:true}),表示不立即执行
      const _effect = new ReactiveEffect(fn)
    // 3. apiWatch.ts doWatch方法
    // watch和watchEffect都是通过doWatch函数来,在这里调用new ReactiveEffect,然后根据不同情况执行effect.run(),对于watchEffect就是//执行器回调,对于watch就是访问监听的数据,然后收集依赖
      const effect = new ReactiveEffect(getter, scheduler)
    // 4. render.ts
    //在 setupRenderEffect中
    const effect = (instance.effect = new ReactiveEffect(
          componentUpdateFn,//更新组件函数
          () => queueJob(update),
          instance.scope // track it in component's effect scope
        ))

    Vue3 program initialization process
Initialization

Vue 3 no longer uses the new Vue() method of Vue2 for program initialization, but uses the createApp method. What happens in createApp?

Reason for rewriting

createApp is a factory function in Vue, which is imported and called as a function. The advantages of functional style are

1. It eliminates the static method originally mounted on Vue and turns it into an instance method, which can reduce memory usage, facilitate tree-shaking, and reduce the packaging volume;

Functional and class decorators are well supported in TypeScript. Using function calls can better support TypeScript, thus improving type support

3. The api of the root component, such as data and child The API of the component remains in the same format, and the mounting is changed from $mount to mount, which simplifies the API and unifies the consistency of the API

4. The mounting method in new Vue will cause global pollution and cannot be independent , createApp can be independent of each other and mounted on demand.

Process implementation

mount

const Vue = {
	createApp(options) {
		//返回app实例
		return {
			mount(selector){
				// 获取渲染函数,编译结果
				// 渲染dom,追加到宿主元素
			}
			compile(template){
			//返回render
				return function render(){
					//描述视图
				}
			}
		}
	}
}
When calling createApp, if there is no render in options, the component is initialized and compile is called to generate a render. If If there is a render, mount it directly;

In Vue2, adding elements uses the comparison and replacement method to compare and judge the differences between diff elements. In Vue3, elements will be deleted and re-added directly. .

Reactive variables can be defined in setup or data, and setup has a higher priority.

createApp

The two initialization functions exposed by Vue, createApp and createRenderer, the calling relationship between them

/*暴露给Vue的createApp*/
function createApp(options){
    const renderer =  Vue.createRenderer({
        /*定义一些平台特有的api,一些实例*/
        aaa(){},
        bbb(){}
    })
    /*用户调用的createApp,实际上是渲染器的createApp*/
    return renderer.createApp()
}
function createRenderer({aaa,bbb}){
    /*获得渲染器*/
    /*这个createApp是函数内部的*/
    return createApp(options){
        /*挂载逻辑*/
        return {
            /*返回App实例*/
        }
    }
}

Source code process

1. The user calls the createApp method =》 Obtain the renderer through ensureRenderer

2. The renderer calls createRender=》※Call the factory function baseGreateRenderer. This function defines patches, diffs, etc., and will eventually return a render is used to render the spa page, a hydrate is used to inject water into the ssr page, and there is a function createApp (different from Vue's createApp)

3. In the function createApp, an instance of the program will be defined Methods, such as mount, get, set, use, mixin, etc.

4. The mount instance method will check whether there is a root component mounted and what method to use for mounting (spa/ssr)

5. The render method calls the patch method for patching

6. The patch method determines the mounting method based on the incoming node type. If it is mounted for the first time, it will be mounted on component, and then element( The patch method will convert vnode into a node node)

7. The patch method executes the internal processComponent method, and finally executes the mountComponent method, which is the final execution method of $mount in Vue2

Initialization process

1. Instantiation of the root component: call createComponentInstance

2. Initialization of the root component: call the setupComponent method, which is the this.$_init method in Vue2, to merge options and set Hooks and responsiveness

3. Install the side effect function of the render function: setupRendererEffect

In Vue3, the watcher was canceled and replaced with a side effect function. The side effect function will be re-executed every time the responsive data changes. The execution of the internal render function will trigger dependency collection, so that when the responsive data changes, the response The component will be updated.

PS: The difference from useEffect in react is that useEffect requires manual collection of dependencies, while effect() in Vue will automatically collect dependencies.

The above is the detailed content of How to call functions during Vue3 initialization. For more information, please follow other related articles on the PHP Chinese website!

Statement
This article is reproduced at:亿速云. If there is any infringement, please contact admin@php.cn delete
Understanding Vue.js: Primarily a Frontend FrameworkUnderstanding Vue.js: Primarily a Frontend FrameworkApr 17, 2025 am 12:20 AM

Vue.js is a progressive JavaScript framework released by You Yuxi in 2014 to build a user interface. Its core advantages include: 1. Responsive data binding, automatic update view of data changes; 2. Component development, the UI can be split into independent and reusable components.

Netflix's Frontend: Examples and Applications of React (or Vue)Netflix's Frontend: Examples and Applications of React (or Vue)Apr 16, 2025 am 12:08 AM

Netflix uses React as its front-end framework. 1) React's componentized development model and strong ecosystem are the main reasons why Netflix chose it. 2) Through componentization, Netflix splits complex interfaces into manageable chunks such as video players, recommendation lists and user comments. 3) React's virtual DOM and component life cycle optimizes rendering efficiency and user interaction management.

The Frontend Landscape: How Netflix Approached its ChoicesThe Frontend Landscape: How Netflix Approached its ChoicesApr 15, 2025 am 12:13 AM

Netflix's choice in front-end technology mainly focuses on three aspects: performance optimization, scalability and user experience. 1. Performance optimization: Netflix chose React as the main framework and developed tools such as SpeedCurve and Boomerang to monitor and optimize the user experience. 2. Scalability: They adopt a micro front-end architecture, splitting applications into independent modules, improving development efficiency and system scalability. 3. User experience: Netflix uses the Material-UI component library to continuously optimize the interface through A/B testing and user feedback to ensure consistency and aesthetics.

React vs. Vue: Which Framework Does Netflix Use?React vs. Vue: Which Framework Does Netflix Use?Apr 14, 2025 am 12:19 AM

Netflixusesacustomframeworkcalled"Gibbon"builtonReact,notReactorVuedirectly.1)TeamExperience:Choosebasedonfamiliarity.2)ProjectComplexity:Vueforsimplerprojects,Reactforcomplexones.3)CustomizationNeeds:Reactoffersmoreflexibility.4)Ecosystema

The Choice of Frameworks: What Drives Netflix's Decisions?The Choice of Frameworks: What Drives Netflix's Decisions?Apr 13, 2025 am 12:05 AM

Netflix mainly considers performance, scalability, development efficiency, ecosystem, technical debt and maintenance costs in framework selection. 1. Performance and scalability: Java and SpringBoot are selected to efficiently process massive data and high concurrent requests. 2. Development efficiency and ecosystem: Use React to improve front-end development efficiency and utilize its rich ecosystem. 3. Technical debt and maintenance costs: Choose Node.js to build microservices to reduce maintenance costs and technical debt.

React, Vue, and the Future of Netflix's FrontendReact, Vue, and the Future of Netflix's FrontendApr 12, 2025 am 12:12 AM

Netflix mainly uses React as the front-end framework, supplemented by Vue for specific functions. 1) React's componentization and virtual DOM improve the performance and development efficiency of Netflix applications. 2) Vue is used in Netflix's internal tools and small projects, and its flexibility and ease of use are key.

Vue.js in the Frontend: Real-World Applications and ExamplesVue.js in the Frontend: Real-World Applications and ExamplesApr 11, 2025 am 12:12 AM

Vue.js is a progressive JavaScript framework suitable for building complex user interfaces. 1) Its core concepts include responsive data, componentization and virtual DOM. 2) In practical applications, it can be demonstrated by building Todo applications and integrating VueRouter. 3) When debugging, it is recommended to use VueDevtools and console.log. 4) Performance optimization can be achieved through v-if/v-show, list rendering optimization, asynchronous loading of components, etc.

Vue.js and React: Understanding the Key DifferencesVue.js and React: Understanding the Key DifferencesApr 10, 2025 am 09:26 AM

Vue.js is suitable for small to medium-sized projects, while React is more suitable for large and complex applications. 1. Vue.js' responsive system automatically updates the DOM through dependency tracking, making it easy to manage data changes. 2.React adopts a one-way data flow, and data flows from the parent component to the child component, providing a clear data flow and an easy-to-debug structure.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat Commands and How to Use Them
1 months agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools