iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Vue3初始化怎么调用函数
  • 229
分享到

Vue3初始化怎么调用函数

2023-07-02 14:07:49 229人浏览 安东尼
摘要

这篇文章主要介绍“vue3初始化怎么调用函数”,在日常操作中,相信很多人在Vue3初始化怎么调用函数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue3初始化怎么调用函数”的疑惑有所帮助!接下来,请跟着小编

这篇文章主要介绍“vue3初始化怎么调用函数”,在日常操作中,相信很多人在Vue3初始化怎么调用函数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue3初始化怎么调用函数”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Vue3初始化调用函数

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

入口文件 runtime-dom/src/index.tx

  • createApp -> createRenderer -> createBaseRenderer(这里还创建了render函数以及一系列渲染时的函数) -> createAppapi(返回了真正的createApp方法),返回了 实例 app,

  • 然后 app.mount(“#app”) -> createVnode -> render(vnode,rootcontainier,isSVG) -> patch -> processComponent -> mountComponent(初次渲染)或者是updateComponent ->(createComponentInstance , setupComponent,setupRenderEffect)

  • 对于setupComponent,有setup函数和没有setup函数分情况处理,如果有就走setup函数处理,初始化props等需要传递给setup函数的参数,调用setup,setupComponent->finishComponentSetup(在这里会处理 2.x版本的options选项初始化),

  • 对于setupRenderEffect,执行一系列生命钩子函数,创建渲染ReactiveEffect,并执行了**effect.run()**方法

ReactiveEffect

类似于 vue2.x 的Watcher, computed,watch,渲染过程中componentUpdateFn也使用了 ReactiveEffect,

const effect = new ReactiveEffect(fn,…)后,除了计算属性会在被访问时才去调用effect.run()->调用fn(),在fn里访问响应式变量,收集依赖,其余的setupRenderEffect,watch,watchEffect,均会在创建ReactiveEffect后调用effect.run()收集依赖,其中

  • setupRenderEffect会访问依赖的响应变量

  • watch(source,cb,options),会执行访问source的函数,收集依赖

  • watchEffect(fn),会自动执行一次fn收集依赖

  • effect(fn,options),其中options有个lazy:true选项,表示不立即执行fn函数收集依赖,返回一个run函数,再次调用run(),执行一次fn函数,收集依赖

// 1.计算属性// computed.ts// ComputedRefImpl类构造函数调用了new ReactiveEffectthis.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程序初始化流程

初始化

在vue3中,程序的初始化不再沿用vue2的new Vue()方法,而是使用了createApp。在createApp中发生了什么呢?

改写的原因

createApp是一个Vue中的工厂函数,以函数的方式进行导入和调用。而函数式的好处是

消灭了原来挂载在Vue上的静态方法,变成实例方法,可以减少内存占用,便于tree-shaking,减小了打包体积;

因为函数式和class装饰器对ts的支持好,使用函数的方式调用,可以更好的支持ts,提高类型支持

根组件的api,如data要和子组件的api保持相同的格式,挂载从$mount改为mount,简化了api并统一了api的一致性

new Vue中挂载的方法会造成全局污染,不能独立出来,createApp可以相互独立,并按需挂载。

流程实现

mount

const Vue = {createApp(options) {//返回app实例return {mount(selector){// 获取渲染函数,编译结果// 渲染dom,追加到宿主元素}compile(template){//返回renderreturn function render(){//描述视图}}}}}

在调用createApp时,如果options中无render,则初始化组件,调用compile产生一个render,若有render则直接挂载;

Vue2中追加元素使用比较替换的方式,diff元素间区别进行对比判断,Vue3中则是直接进行删除重加。

可以在setup或者是data中定义响应式变量, setup的优先级更高。

createApp

Vue暴露的两个初始化的函数,createApp和createRenderer,他们之间的调用关系 

function createApp(options){    const renderer =  Vue.createRenderer({                aaa(){},        bbb(){}    })        return renderer.createApp()}function createRenderer({aaa,bbb}){            return createApp(options){                return {                    }    }}

源码流程

用户调用createApp方法 =》 通过ensureRenderer得到渲染器

渲染器调用createRender =》※调用工厂函数baseGreateRenderer,这个函数中定义了patch和diff等,最终会return一个render用来给spa页面进行渲染,一个hydrate用来给ssr页面进行注水,还有一个函数的createApp(不同于Vue的createApp)

在函数的createApp中会定义程序的实例方法,如mount,get,set,use,mixin等

mount实例方法会去查看是否有根组件挂载,使用什么方法进行挂载(spa/ssr)

render方法调用patch方法进行打补丁

patch方法根据传入的节点类型进行挂载方法的判断,如果首次挂载则为挂载component,之后是挂载element(patch方法会将vnode转化为node节点)

patch方法执行内部processComponent方法,最终执行mountComponent方法,也就是Vue2中$mount最终执行的方法

初始化流程

根组件的实例化:调用createComponentInstance

初始化根组件:调用setupComponent方法,也就是Vue2中的this.$_init方法,用来将选项进行合并,并设置钩子和响应式

安装render函数的副作用函数:setupRendererEffect

在Vue3中取消了watcher改为了副作用函数,副作用函数会在每次响应式数据发生变化的时候重新执行,内部的render函数的执行会触发依赖收集,这样当响应式数据变化时,响应式组件就会更新。

PS:与react中的useEffect不同的方面是,useEffect需要手动的收集依赖,而Vue中的effect()会自动的收集依赖。 

到此,关于“Vue3初始化怎么调用函数”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Vue3初始化怎么调用函数

本文链接: https://www.lsjlt.com/news/342561.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue3初始化怎么调用函数
    这篇文章主要介绍“Vue3初始化怎么调用函数”,在日常操作中,相信很多人在Vue3初始化怎么调用函数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue3初始化怎么调用函数”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-07-02
  • Vue3初始化如何调用函数
    目录Vue3初始化调用函数入口文件 runtime-dom/src/index.txReactiveEffectVue3程序初始化流程初始化改写的原因流程实现源码流程初始化流程Vue...
    99+
    2024-04-02
  • 怎么使用c#构造函数初始化列表
    在C#中,可以使用构造函数初始化列表来初始化类的成员变量。构造函数初始化列表是在构造函数的参数列表后面使用冒号来定义的。下面是一个示...
    99+
    2023-09-28
    c#
  • 怎么在tomcat中调用Servlet实现初始化
    怎么在tomcat中调用Servlet实现初始化?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、代码启动tomcat平常我们不论是Windows还是linux,我们都是通过脚...
    99+
    2023-06-14
  • C#怎么初始化数组
    本篇内容介绍了“C#怎么初始化数组”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!初始化数组声明一个数组不会在内存中初始化数组。当初始化数组变...
    99+
    2023-06-17
  • C++是怎么构造函数的初始化列表
    C++是怎么构造函数的初始化列表,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.问题class A {private:int m_a;publi...
    99+
    2023-06-22
  • VB.NET中怎么初始化数组
    本篇文章给大家分享的是有关VB.NET中怎么初始化数组,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。VB.NET数组初始化在任何编程语言中都很重要。VB.NET与其它语言相似,...
    99+
    2023-06-17
  • C#中怎么初始化数组
    这篇文章给大家介绍C#中怎么初始化数组,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C#数组初始化三大方法示例// Single-dimensional array (numbers).&...
    99+
    2023-06-17
  • 怎么在java中初始化数组
    这篇文章给大家介绍怎么在java中初始化数组,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网页开发;5. 企...
    99+
    2023-06-14
  • c语言数组怎么初始化
    本篇内容主要讲解“c语言数组怎么初始化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“c语言数组怎么初始化”吧!C语言数组初始化的三种方式:1、在定义时直接赋值,语法“数据类型 arrayName...
    99+
    2023-07-04
  • Spring Bean怎么初始化
    这篇文章主要为大家展示了“Spring Bean怎么初始化”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Spring Bean怎么初始化”这篇文章吧。前言做Java都有很多年...
    99+
    2023-06-29
  • Go 的入口函数和包初始化的使用
    目录包 packagemain.main 函数:Go 应用的入口函数package main注意其他包也可以拥有 main 函数或方法重点引子init 函数:Go 包的初始化函数和 ...
    99+
    2024-04-02
  • SP2-1503: 无法初始化 Oracle 调用界面
    问题描述: win10下,cmd运行 输入sqlplus报错: SP2-1503: 无法初始化 Oracle 调用界面 SP2-0152: ORACLE 不能正常工作 ...
    99+
    2024-04-02
  • C++初始化函数列表详细解析
    在以下三种情况下需要使用初始化成员列表: 一,需要初始化的数据成员是对象的情况; 二,需要初始化const修饰的类成员; 三,需要初始化引用成员数据; 原因:C++可以定义引用类型的...
    99+
    2022-11-15
    初始化函数列表
  • php怎么new一个数组初始化
    在PHP中,使用array()函数即可初始化一个数组,其语法格式如下:$array_name = array(value1, value2, ..., valueN);其中,$array_name为数组名,value1到valueN为可选的...
    99+
    2023-05-19
  • C#中怎么初始化二维数组
    这期内容当中小编将会给大家带来有关C#中怎么初始化二维数组,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。C#多维数组:(1)数组的声明:int[] a1;  //整数类型的一...
    99+
    2023-06-17
  • 云服务器怎么初始化数据
    云服务器的初始化可以分为两步: 配置云服务器:在云服务器的控制台中选择“配置云服务器”,然后将“云服务器名称(VSSID)、网络位置(Nginx或者Apache)和服务端口设置为可用”。 启动云服务器:在配置好的云服务器上运行以下命令进...
    99+
    2023-10-26
    初始化 服务器 数据
  • jquery初始化函数的方法有哪些
    在 jQuery 中,有以下几种方法可以用来初始化函数:1. $(document).ready(function(){...}):...
    99+
    2023-08-09
    jquery
  • Java中怎样初始化数组
    本篇文章给大家分享的是有关Java中怎样初始化数组,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一个数组的示例让我们在 Java 中创建一个长度为 10 的整型数组:int[]...
    99+
    2023-06-16
  • redis怎么初始化池连接个数
    在Redis中,可以通过 `maxTotal` 参数来设置连接池的最大连接数。该参数表示连接池中最大的活动连接数,即同时可以从连接池...
    99+
    2023-09-04
    redis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作