Table of Contents
Vue3 initialization call function
Entry file runtime-dom/src/index.tx
mount
Home Web Front-end Vue.js How to call functions during Vue3 initialization

How to call functions during Vue3 initialization

May 21, 2023 pm 12:55 PM
vue3

Vue3 initialization call function

createApp({}).mount(‘#app')
Copy after login

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
        ))
    Copy after login

    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(){
					//描述视图
				}
			}
		}
	}
}
Copy after login
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实例*/
        }
    }
}
Copy after login
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 of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

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)
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
1 months ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

vue3+vite: How to solve the error when using require to dynamically import images in src vue3+vite: How to solve the error when using require to dynamically import images in src May 21, 2023 pm 03:16 PM

vue3+vite:src uses require to dynamically import images and error reports and solutions. vue3+vite dynamically imports multiple images. If vue3 is using typescript development, require will introduce image errors. requireisnotdefined cannot be used like vue2 such as imgUrl:require(' .../assets/test.png') is imported because typescript does not support require, so import is used. Here is how to solve it: use awaitimport

How to use tinymce in vue3 project How to use tinymce in vue3 project May 19, 2023 pm 08:40 PM

tinymce is a fully functional rich text editor plug-in, but introducing tinymce into vue is not as smooth as other Vue rich text plug-ins. tinymce itself is not suitable for Vue, and @tinymce/tinymce-vue needs to be introduced, and It is a foreign rich text plug-in and has not passed the Chinese version. You need to download the translation package from its official website (you may need to bypass the firewall). 1. Install related dependencies npminstalltinymce-Snpminstall@tinymce/tinymce-vue-S2. Download the Chinese package 3. Introduce the skin and Chinese package. Create a new tinymce folder in the project public folder and download the

How Vue3 parses markdown and implements code highlighting How Vue3 parses markdown and implements code highlighting May 20, 2023 pm 04:16 PM

Vue implements the blog front-end and needs to implement markdown parsing. If there is code, it needs to implement code highlighting. There are many markdown parsing libraries for Vue, such as markdown-it, vue-markdown-loader, marked, vue-markdown, etc. These libraries are all very similar. Marked is used here, and highlight.js is used as the code highlighting library. The specific implementation steps are as follows: 1. Install dependent libraries. Open the command window under the vue project and enter the following command npminstallmarked-save//marked to convert markdown into htmlnpmins

How to refresh partial content of the page in Vue3 How to refresh partial content of the page in Vue3 May 26, 2023 pm 05:31 PM

To achieve partial refresh of the page, we only need to implement the re-rendering of the local component (dom). In Vue, the easiest way to achieve this effect is to use the v-if directive. In Vue2, in addition to using the v-if instruction to re-render the local dom, we can also create a new blank component. When we need to refresh the local page, jump to this blank component page, and then jump back in the beforeRouteEnter guard in the blank component. original page. As shown in the figure below, how to click the refresh button in Vue3.X to reload the DOM within the red box and display the corresponding loading status. Since the guard in the component in the scriptsetup syntax in Vue3.X only has o

How to select an avatar and crop it in Vue3 How to select an avatar and crop it in Vue3 May 29, 2023 am 10:22 AM

The final effect is to install the VueCropper component yarnaddvue-cropper@next. The above installation value is for Vue3. If it is Vue2 or you want to use other methods to reference, please visit its official npm address: official tutorial. It is also very simple to reference and use it in a component. You only need to introduce the corresponding component and its style file. I do not reference it globally here, but only introduce import{userInfoByRequest}from'../js/api' in my component file. import{VueCropper}from'vue-cropper&

How to solve the problem that after the vue3 project is packaged and published to the server, the access page displays blank How to solve the problem that after the vue3 project is packaged and published to the server, the access page displays blank May 17, 2023 am 08:19 AM

After the vue3 project is packaged and published to the server, the access page displays blank 1. The publicPath in the vue.config.js file is processed as follows: const{defineConfig}=require('@vue/cli-service') module.exports=defineConfig({publicPath :process.env.NODE_ENV==='production'?'./':'/&

How to use Vue3 reusable components How to use Vue3 reusable components May 20, 2023 pm 07:25 PM

Preface Whether it is vue or react, when we encounter multiple repeated codes, we will think about how to reuse these codes instead of filling a file with a bunch of redundant codes. In fact, both vue and react can achieve reuse by extracting components, but if you encounter some small code fragments and you don’t want to extract another file, in comparison, react can be used in the same Declare the corresponding widget in the file, or implement it through renderfunction, such as: constDemo:FC=({msg})=>{returndemomsgis{msg}}constApp:FC=()=>{return(

How to use defineCustomElement to define components in Vue3 How to use defineCustomElement to define components in Vue3 May 28, 2023 am 11:29 AM

Using Vue to build custom elements WebComponents is a collective name for a set of web native APIs that allow developers to create reusable custom elements (customelements). The main benefit of custom elements is that they can be used with any framework, even without one. They are ideal when you are targeting end users who may be using a different front-end technology stack, or when you want to decouple the final application from the implementation details of the components it uses. Vue and WebComponents are complementary technologies, and Vue provides excellent support for using and creating custom elements. You can integrate custom elements into existing Vue applications, or use Vue to build

See all articles