Vue | Vue.js 组件化 知识拓展(一)

简介: Vue | Vue.js 组件化 知识拓展(一)

一、组件的生命周期

认识生命周期

什么是生命周期呢?


       生物学上,生物生命周期指的是一个生物体在生命开始到结束 周而复始所历经的一系列变化过程;


       每个组件都可能会经历从 创建 挂载 更新 卸载 等一系列的过程


       在这个过程的某一个阶段 我们可能会想要 添加一些属于自己的代码逻辑(如组件创建后请求服务器数据)


       但是我们 如何可以知道目前组件正在哪一个过程? Vue给我们提供了 组件的生命周期函数


命周期函数:


       生命周期函数是 一些钩子函数(回调函数),在 某个时间会被Vue源码内部进行回调


       通过对生命周期函数的回调,我们可以知道 目前组件正在经历什么阶段


       我们就可以在 该生命周期中编写属于自己的逻辑代码了

生命周期的流程


36c72a99113a43c2a2e9b3210a37944e.jpg

a6dba969f8734004a832e5107ace026d.png

生命周期的过程分析

App/Home/Banner/ShowMessage


       beforeCreate


1.创建组件实例


       created(重要: 1 发送网络请求 2事件监听 3 this.$watch())


2.template模版编译


       beforeMount


3.挂载到虚拟DOM -> 虚拟DOM -> 真实的DOM -> 用户界面看到 div


       mounted(重要:元素已经被挂载 获取DOM  使用DOM)


4 数据更新 message发生改变


       beforeUpdate


根据最新数据生成新的VNode 生成新的虚拟DOM  -> 真实的DOM


       Updated


5 不再使用 v-if="fasle"


       beforeUnmount


       将之前挂载在虚拟DOM中VNode从虚拟DOM中移除


       unmounted(相对重要: 进行回收操作(取消事件监听))


最后 将组建实例销毁掉

二、组件中的ref引用

$refs的使用

我们在组件中想要直接获取到元素对象或子组件实例:


       在Vue开发中我们是 不推荐进行原生DOM操作


       这个时候 我们可以给元素或者组件绑定一个ref的attribute属性


组件实例有一个$refs属性:


       他是一个Object,持有 注册过ref attribute 的所有DOM元素和组件实例

JavaScript
//  3 获取banner 组件: 组件实例
  // 不全等 实例,  以banner为模版 重新创建一个实例instance
  console.log(this.$refs.banner) // 拿到一个Proxy Proxy {bannerClick: ƒ, …}
  // 3 1 在父组件中可以主动的调用子组件的对象方法
  this.$refs.banner.bannerClick()
  // 3 2 获取banner组件实例,获取banner中的元素  拿到根元素
  console.log(this.$refs.banner.$el)
  // 3 3 如果banner template 是多个根 拿到的是 第一个Node节点
  // 但是我要拿到有用的东西 所以使用 nextSibling
  // 主: 开发中 不推荐组件中 有多个根元素
  console.log(this.$refs.banner.$el.nextSibling())

$parent和$root(了解)

K可以通过$parent访问父元素 $root访问根组件

三、动态组件的使用

切换组件案例

实现一个功能:


       点击一个 tab-bar 切换不同的组件显示


目前可以通过两种不同的实现思路实现:


       一:通过v-if来判断 显示不同的组件


       二:动态组件的方式

通过v-if实现:

JavaScript
<div class="view">
<!--      1 第一种做法 通过v-if判断逻辑来决定 显示哪一个组件-->
  <template v-if="currentIndex === 0">
    <home></home>
  </template>
  <template v-else-if="currentIndex === 1">
    <About></About>
  </template>
  <template v-else-if="currentIndex === 2">
    <Category></Category>
  </template>
</div>

通过 动态组件 实现:

动态组件使用 component组件 通过一个特殊的attribute is来实现

c32164481dbf468bb9e1af7f86fbec9e.png

这个currentTab的值需要是什么内容?


       全局注册:可以通过 component函数注册的组件


       布局注册:在一个 组件对象的components对象中注册的组件

动态组件的传值(应用较少)

如果是动态组件我们可以给它们传值和监听事件


       我们需要将 属性和监听事件 放到 component上来使用

JavaScript
<component name="xiong"
   :age="18"
   @homeClick="homeClick"
   :is="currentTab">
</component>


相关文章
|
4天前
|
JavaScript
Vue基础知识总结 4:vue组件化开发
Vue基础知识总结 4:vue组件化开发
|
4天前
|
存储 JavaScript
Vue 状态管理工具vuex
Vue 状态管理工具vuex
|
10天前
|
缓存 JavaScript UED
Vue 中实现组件的懒加载
【10月更文挑战第23天】组件的懒加载是 Vue 应用中提高性能的重要手段之一。通过合理运用动态导入、路由配置等方式,可以实现组件的按需加载,减少资源浪费,提高应用的响应速度和用户体验。在实际应用中,需要根据具体情况选择合适的懒加载方式,并结合性能优化的其他措施,以打造更高效、更优质的 Vue 应用。
|
9天前
|
JavaScript
如何在 Vue 中使用具名插槽
【10月更文挑战第25天】通过使用具名插槽,你可以更好地组织和定制组件的模板结构,使组件更具灵活性和可复用性。同时,具名插槽也有助于提高代码的可读性和可维护性。
14 2
|
9天前
|
JavaScript
Vue 中的插槽
【10月更文挑战第25天】插槽的使用可以大大提高组件的复用性和灵活性,使你能够根据具体需求在组件中插入不同的内容,同时保持组件的结构和样式的一致性。
12 2
|
9天前
|
前端开发 JavaScript 容器
在 vite+vue 中使用@originjs/vite-plugin-federation 模块联邦
【10月更文挑战第25天】模块联邦是一种强大的技术,它允许将不同的微前端模块组合在一起,形成一个统一的应用。在 vite+vue 项目中,使用@originjs/vite-plugin-federation 模块联邦可以实现高效的模块共享和组合。通过本文的介绍,相信你已经了解了如何在 vite+vue 项目中使用@originjs/vite-plugin-federation 模块联邦,包括安装、配置和使用等方面。在实际开发中,你可以根据自己的需求和项目的特点,灵活地使用模块联邦,提高项目的可维护性和扩展性。
|
10天前
|
JavaScript 前端开发 UED
vue 提高 tree shaking 的效果
【10月更文挑战第23天】提高 Vue 中 Tree shaking 的效果需要综合考虑多个因素,包括模块的导出和引用方式、打包工具配置、代码结构等。通过不断地优化和调整,可以最大限度地发挥 Tree shaking 的优势,为 Vue 项目带来更好的性能和用户体验。
|
10天前
|
缓存 JavaScript UED
Vue 中异步加载模块的方式
【10月更文挑战第23天】这些异步加载模块的方式各有特点和适用场景,可以根据项目的需求和架构选择合适的方法来实现模块的异步加载,以提高应用的性能和用户体验
|
10天前
|
JavaScript 测试技术 UED
解决 Vue 项目中 Tree shaking 无法去除某些模块
【10月更文挑战第23天】解决 Vue 项目中 Tree shaking 无法去除某些模块的问题需要综合考虑多种因素,通过仔细分析、排查和优化,逐步提高 Tree shaking 的效果,为项目带来更好的性能和用户体验。同时,持续关注和学习相关技术的发展,不断探索新的解决方案,以适应不断变化的项目需求。
|
11天前
|
JavaScript 搜索推荐 前端开发
Vue SSR 预渲染的广泛应用场景及其优势
【10月更文挑战第23天】Vue SSR 预渲染技术在众多领域都有着广泛的应用价值,可以显著提升网站的性能、用户体验和搜索引擎优化效果。随着技术的不断发展和完善,其应用场景还将不断拓展和深化
27 2