Vue前端框架12 组件生命周期、生命周期的应用、动态组件、组件保持存活、异步组件、依赖注入、Vue应用原理

2023-11-18

一、组件生命周期

每个Vue组件在创建时需要经历一系列的初始化步骤,比如设置侦听,编译模板,挂载实例到DOM,或者数据改变时更新DOM。
在这个过程中,也会运行生命周期钩子函数,可以让我们在特定阶段运行自己的代码。

<template>
  <h3>组件的生命周期</h3>
  <p>{{message}}</p>
  <button @click="updateMessage">更新数据</button>

</template>

<script>
/**
 * 生命周期函数分为四个时期
 * 创建期:beforeCreate、created
 * 挂载期:beforeMount、mounted
 * 更新期:beforeUpdate、updated
 * 销毁期:beforeUnmount、unmounted
 */
export default {
  name: 'App',
  data(){
    return{
      message:"更新之前"
    }
  },
  methods:{
    updateMessage(){
      this.message="更新之后"
    }
  },
  beforeCreate(){
    console.log("组件创建之前")
  },
  created(){
    console.log("组件创建")
  },
  beforeMount(){
    console.log("组件挂载之前")
  },
  mounted(){
    console.log("组件挂载")
  },
  beforeUpdate(){
    console.log("组件更新之前")
  },
  updated(){
    console.log("组件更新")
  },
  beforeUnmount(){
    console.log("组件销毁之前")
  },
  unmounted(){
    console.log("组件销毁")
  }
}
</script>


二、生命周期的应用

主要俩个应用:
1、通过ref获取元素DOM结构
2、模拟网络请求渲染数据

<template>
  <h3 ref="title">组件的生命周期</h3>
</template>

<script>
export default {
  name: 'App',
  data(){
    return{
      message:"更新之前"
    }
  },
  beforeMount(){
    console.log("组件挂载之前")
    console.log(this.$refs.title)
  },
  mounted(){
    console.log("组件挂载")
    console.log(this.$refs.title)
  }
}
</script>


三、动态组件

<template>
  <Component :is="tabComponent"></Component>
  <button @click="changeHandle">切换组件</button>
</template>

<script>
import ComponentA from "@/components/componentA";
import ComponentB from "@/components/ComponentB";
export default {
  name: "ComponentMain",
  components: {ComponentB, ComponentA},
  data(){
    return{
      tabComponent:ComponentA
    }
  },
  methods:{
    changeHandle(){
      this.tabComponent= this.tabComponent=="ComponentA" ? "ComponentB":"ComponentA"
    }
  }
}
</script>

<style scoped>

</style>

四、组件保持存活

在使用上面说的component:is 在多个组件之间切换时,被切换的组件会被卸载
可以通过keep-alive 组件强制被切换掉的组件依然保持存活状态

<template>
  <keep-alive>
    <Component :is="tabComponent"></Component>
  </keep-alive>
  <button @click="changeHandle">切换组件</button>
</template>

<script>
import ComponentA from "@/components/componentA";
import ComponentB from "@/components/ComponentB";
export default {
  name: "ComponentMain",
  components: {ComponentB, ComponentA},
  data(){
    return{
      tabComponent:ComponentA
    }
  },
  methods:{
    changeHandle(){
      this.tabComponent= this.tabComponent=="ComponentA" ? "ComponentB":"ComponentA"
    }
  }
}
</script>

<style scoped>

</style>
<template>
  <h3>ComponentA</h3>
  <p>{{message}}</p>
  <button @click="changeHandle">切换数据</button>
</template>
<script>
  export default {
    data(){
      return{
        message:"老数据"
      }
    },
    methods:{
      changeHandle(){
        this.message="新数据"
      }
    }
  }
</script>

五、异步组件

Vue通过defineAsyncComponent方法来实现此功能

<template>
  <keep-alive>
    <Component :is="tabComponent"></Component>
  </keep-alive>
  <button @click="changeHandle">切换组件</button>
</template>

<script>
import ComponentA from "@/components/componentA";
//实现异步加载组件
import {defineAsyncComponent} from "vue";
const ComponentB=defineAsyncComponent(()=>
  import("@/components/ComponentB")
)
export default {
  name: "ComponentMain",
  components: {ComponentB, ComponentA},
  data(){
    return{
      tabComponent:ComponentA
    }
  },
  methods:{
    changeHandle(){
      this.tabComponent= this.tabComponent=="ComponentA" ? "ComponentB":"ComponentA"
    }
  }
}
</script>

<style scoped>

</style>

六、依赖注入

prop只可以进行逐层透传
provide和inject可以帮助我们解决逐层透传带来的复杂操作

<template>
  <Cpeople2></Cpeople2>
</template>

<script>
//注意 provide和inject只可以上传下 不可以反向
import Cpeople2 from "@/components/Cpeople2";
export default {
  // eslint-disable-next-line vue/multi-word-component-names
  name: "Cpeople1",
  data(){
    return{
      message:"爷爷的财产"
    }
  },
  // provide:{
  //   message:"爷爷的财产"
  // },
  provide(){
    return{
      message:this.message
    }
  },
  components: {Cpeople2}
}
</script>

<style scoped>

</style>
<template>
  <P>{{message}}</P>
  <P>{{fullMessage}}</P>
</template>

<script>
export default {
  // eslint-disable-next-line vue/multi-word-component-names
  name: "Cpeople3",
//  通过 inject 获得 祖宗的provide
  inject:["message"],
  data(){
    return{
      fullMessage:this.message
    }
  }
}
</script>

<style scoped>

</style>

也可以从根开始传

import { createApp } from 'vue'
import App from './App.vue'

const app=createApp(App)
//注入全局数据
app.provide("gData","全局数据")

app.mount('#app')


七、Vue应用

每个Vue应用都是从createApp函数创建的一个新的应用实例

import { createApp } from 'vue'
import App from './App.vue'

const app=createApp({
//根组件选项
})
//注入全局数据
app.provide("gData","全局数据")

app.mount('#app')


一般我们都用App.vue作为我们的根组件

只有调用了mount()方法后才可以渲染出来

公共资源存放在src目录下的assets文件夹下

主要的入口就是index,html文件

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue前端框架12 组件生命周期、生命周期的应用、动态组件、组件保持存活、异步组件、依赖注入、Vue应用原理 的相关文章

随机推荐

  • google.api.http

    Http 定义api服务的http配置 它包含一个httprule列表 每个列表指定一个rpc方法到一个或多个http rest api方法的映射 字段 描述 rules HttpRule 一个适用于各个API方法的http配置规则列表 注
  • 编译优化之 - 向量化优化入门

    1 介绍 2 Intel高级向量扩展 3 GCC中向量化 4 ICC中向量化 5 AOCC LLVM中向量化 1 介绍 什么是自动向量化 自动向量化 automatic vectorization 是自动并行化 automatic para
  • STM32笔记:高精度脉冲宽度计 双输入捕获+DMA方式

    本文介绍如何用STM32F107VC Waveshare Open107V实验板 实现高精度的脉冲宽度计 占空比 开发环境 IDE STM32CubeIDE 1 8 固件库 STM32Cube FW F1 V1 8 4 函数发生 RIGOL
  • 人工智能开源社区论坛----开源助力多领域AI生态发展

    ChinaOSC 2022 人工智能开源社区论坛 开源助力多领域AI生态发展技术论坛将于2022年8月20日13 00 17 00在陕西省西安高新国际会议中心召开 本论坛将围绕 开源社区助力多领域AI生态发展 主题 邀请AI开源领域顶级技术
  • Filco圣手二代键盘蓝牙连接方法

    键盘前面的电源按钮按进去 即打开电源开关 同时按下Ctrl Alt Fn 看到蓝灯和红灯同时亮起 之后剩蓝灯闪烁 按下小键盘中数字键1 4中的一个 一共可以连4台设备 如果你选的数字之前连接过其他设备 可以在第2步做完之后先按两秒清除按钮
  • 托福综合写作套路

    1 文章认定 教授驳斥 2 The reading passage provides three possible functions of the carved stone balls However in the lecture the
  • 决策树算法原理+例题练习

    一 决策树的优缺点 优点 计算复杂度不高 输出结果易于理解 对中间值的缺失值不敏感 可以处理不相关特征数据 缺点 可能会产生过度匹配的问题 使用数据类型 数值型和标称型 二 一个实例 一天 老师问了个问题 只根据头发和声音怎么判断一位同学的
  • LSF的使用方法总结

    一 LSF 基本介绍 LSF Load Sharing Facility 是IBM旗下的一款分布式集群管理系统软件 负责计算资源的管理和批处理作业的调度 它给用户提供统一的集群资源访问接口 让用户透明地访问整个集群资源 同时提供了丰富的功能
  • 5.19 华为算法笔试经验

    华为机试一共三道题 对应的分值分别为100分 200分 300分 下面介绍这次笔试题目 第一题 一共有N个员工围成一个圆圈 分别是1 2 N每一个员工身上有对应数量的令牌 轮流从顺时针以及逆时针进行报数 顺时针报数周期为R 逆时针报数周期为
  • 僵尸进程的多种处理方式-图文详细教程

    问题引起原因 yum更新导致无法使用yum 于是将占用进程kill掉 导致 ps A ostat ppid pid cmd grep e Zz ps ef no headers k8s环境kubelet服务异常 systemd1服务超时 导
  • IP地址和子网掩码详解

    原文链接 IP和子网掩码 我们都知道 是由四段数字组成 在此 我们先来了解一下3类常用的 A类IP段 0 0 0 0 到127 255 255 255 B类IP段 128 0 0 0 到191 255 255 255 C类IP段 192 0
  • Android Studio连接Mysql数据库步骤以及常见错误

    1 先把Mysql给下好 环境变量也配置好 这里我就不说了 2 下载好Navicat for Mysql软件 管理数据库 3 进入Android Studio创建一个类 写好连接数据库的代码 我们采用的是常用的JDBC方法来连接 需要的ja
  • JNI基础

    问题1 JNI是什么 答 JNI是Java语言的机制 Java可以通过JNI调用C C 代码 C C 代码也可以通过JNI调用Java代码 问题2 NDK是什么 答 NDK是代码库 功能有两个 1 将 c cpp文件转换成 so文件 2 将
  • 【产品笔记】3.产品经理实战

    1 团队合作 2 产品设计到立项 3 项目启动到产品上线 4 产品上线后的运营 产品 商业模式 功能 设计 技术 内容 产品的成功归功于整个团队的精诚合作 产品的失败只归咎于产品负责人 用户运营 拉新 留存 老用户召回 内容运营 内容质量
  • Visual Studio 2017下载地址和安装教程(图解版)

    Visual Studio 2017下载地址和安装教程 图解版 Visual Studio 2017不仅支持C C Python Visual Basic Node js HTML JavaScript等各大编程语言 还能开发 iOS An
  • 华为OD机试真题-日志排序-2023年OD统一考试(B卷)

    华为OD机试2023年最新题库 JAVA Python C 题目描述 运维工程师采集到某产品现网运行一天产生的日志N条 现需根据日志时间按时间先后顺序对日志进行排序 日志时间格式为 H M S N H表示小时 0 23 M表示分钟 0 59
  • MOS管的知识,看这一篇就可以了

    转载 21ic电子网 2020 11 15 18 19 以下文章来源于记得诚电子设计 作者记得诚 记得诚电子设计 分享电子硬件知识 永远相信美好的事情即将发生 今天的文章简单总结一下MOS管 如下是本文目录 场效应管分类 场效应管分为结型
  • 虚拟机执行子程序-虚拟机字节码执行引擎

    代码编译的结果从本地机器码转变为字节码 是存储格式发展的一小步 却是编程语言发展的一 大步 虚拟机执行子程序 虚拟机字节码执行引擎 一 概述 二 运行时栈帧结构 1 局部变量表 2 操作数栈 3 动态连接 4 方法返回地址 5 附加信息 三
  • 图像处理知识框架

    转自https blog csdn net hitwengqi article details 8292675 花了点时间整理了一下数字图像处理知识体系 从宏观上把握图像处理 使自己的学习思路就更加清晰 1 本文大部分内容来自 http b
  • Vue前端框架12 组件生命周期、生命周期的应用、动态组件、组件保持存活、异步组件、依赖注入、Vue应用原理

    文章目录 一 组件生命周期 二 生命周期的应用 三 动态组件 四 组件保持存活 五 异步组件 六 依赖注入 七 Vue应用 一 组件生命周期 每个Vue组件在创建时需要经历一系列的初始化步骤 比如设置侦听 编译模板 挂载实例到DOM 或者数