vue父子组件&继承组件的生命周期以及应用

2023-11-15

父子组件的生命周期顺序

今天在做项目时候,发现了一个问题,那就是父子组件的执行顺序问题,在我印象里,肯定是先执行父组件的生命周期,再执行子组件的生命周期,但其实并不是这样的。我们来看代码:

我们先用vue-cli搭建一个项目。(用什么搭建并不重要,我这里为了快速模拟就偷懒不自己配置webpack了)
父组件: app.vue

<template>
  <div id="app">
    <hello></hello>
  </div>
</template>

<script>
import Hello from './components/Hello'

export default {
  name: 'app',
  components: {
    Hello
  },
  beforeMount() {
    console.log('I am parents beforeMount');
  },
  mounted() {
    console.log('I am parents mounted');
  },
  beforeCreate() {
    console.log('I am parents beforeCreated');
  },
  created() {
    console.log('I am parents created');
  }
}
</script>

子组件hello.vue

<template>
  <div class="hello">
    hello
  </div>
</template>

<script>
export default {
  name: 'hello',
  beforeMount() {
    console.log('I am child beforeMount');
  },
  mounted() {
    console.log('I am child mounted');
  },
  beforeCreate() {
    console.log('I am child beforeCreated');
  },
  created() {
    console.log('I am child created');
  }
}
</script>

这里写图片描述

我们从而可以得出结论。
父子组件的执行顺序为,
父组件beforeCreated ->父组件created ->父组件beforeMounted ->子组件beforeCreated ->子组件created ->子组件beforeMounted ->子组件mounted -> 父组件mounted。

知道了这个以后,在一些父子组件的接口中,那些强依赖于顺序的接口调用顺序就引刃而解了。

一定要记住父组件的mounted最后。
一定要记住父组件的mounted最后。
一定要记住父组件的mounted最后。

继承组件的生命周期

base.vue

<template>
  <div>
    base
  </div>
</template>

<script>
  export default {
    beforeMount() {
      console.log('I am base beforeMount');
    },
    mounted() {
      console.log('I am base mounted');
    },
    beforeCreate() {
      console.log('I am base beforeCreated');
    },
    created() {
      console.log('I am base created');
    }
  }
</script>

hello.vue

<template>
  <div class="hello">
    hello
  </div>
</template>

<script>
import Base from './base.vue';

export default {
  extends: Base,
  beforeMount() {
    console.log('I am beforeMount');
  },
  mounted() {
    console.log('I am mounted');
  },
  beforeCreate() {
    console.log('I am beforeCreated');
  },
  created() {
    console.log('I am created');
  }
}
</script>

这里写图片描述

可以看到生命周期是交替执行的。

应用

理解了以上的过程,我们可以来进行一个应用,我们在开发项目的时候都知道,一旦项目大了,代码就特别多,而且对于生命周期也难以维护,我们就这样采取以下的方式,会让你的代码整洁许多。
base.vue

<template>
  <div class="hello">
    base
  </div>
</template>

<script>
  export default {
    mounted() {
      this.handleMounted();
    }
  }
</script>

hello.vue

<template>
  <div class="hello">
    hello
  </div>
</template>

<script>
import Base from './base.vue';

export default {
  extends: Base,
  methods: {
    handleMounted() {
      console.log('mounted');
    }
  }
}
</script>

结果
这里写图片描述

这样有什么好处呢,我们可以更加关注组件编写的方法的过程,不必重复去定义一些生命周期,在一个父组件中统一分发了,这样在一个庞大的项目中,我们就可以更加愉快的编写代码了。整个逻辑也更加清晰。

更多请关注

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

vue父子组件&继承组件的生命周期以及应用 的相关文章

  • 巧用搜索摆脱新手程序员标签

    文章目录 巧用搜索摆脱新手程序员标签 在哪里搜 搜索什么 搜教程 搜IDE 搜特性 搜集成 搜比较 搜定义 搜原因 搜架构 搜错误 扩展阅读 巧用搜索摆脱新手程序员标签 在哪里搜 国外网站 Google 搜索引擎 Bing 搜索引擎 Git
  • Golang初入编程-踩坑笔记(1)

    一定要自己动手写 不然使用的时候可能连等号的位置都搞不清楚 该语言没有面向对象的概念 什么函数传什么参数返回什么值自己要多练习 i 属于独立语句 不能和其他语句写到一起 自己占一行 以下东东需要初始化 开辟空间 包括切片 指针 map 数组

随机推荐

  • java写一个android程序_【Android开发笔记】3.编写第一个Android程序

    前言 上一节我们通过一个Demo熟悉了Eclipse的基本使用 如何在模拟器和手机中运行以及如何打包成APK 但没具体编写代码 相信很多同学已经按耐不住了吧 这一节我们会动手编写代码来熟悉Android SDK的情况和JAVA的一些特性 声
  • OpenAPI 3.0 规范-食用指南

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • 在Kong网关中使用OAuth2认证

    文章目录 在Kong网关中使用OAuth2认证 前言 在Kong上开启HTTPS OAuth2认证 添加OAuth2插件 创建Consumer的OAuth2 credential 测试OAuth2 Authorization Flow 获取
  • 【无功优化】基于教与学算法实现IEEE_33节点无功优化附matlab代码

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 更多Matlab仿真内容点击 智能优化算法 神经网络预测 雷达通信 无线传感器 电力系统 信号
  • Linux一行命令筛选并停止某个服务的进程

    Linux下 筛选某个服务 如nginx 的进程命令 ps ef grep nginx 如果想停掉相应的进程则可以使用kill命令 如果想一行命令筛选出进程号 并kill掉 则 ps ef grep nginx grep v grep aw
  • 解决VC6在Win7或Win10下调试无法结束进程的Bug

    自己的系统是Win7 装上了VC6 调试一段小代码之后再次编译的时候就提示如下的错误 LINK fatal error LNK1168 cannot open Debug 1 exe for writing 意思就是编译要生成同名的 1 e
  • vue中使用Swiper

    一 安装依赖 npm i swiper 二 项目中使用 import swiper swiperSlide from vue awesome swiper import swiper css swiper css div class lb
  • JavaScript基础Day03:数组和函数

    JavaScript基础Day03 文章目录 JavaScript基础Day03 一 关键字break和continue 二 数组 1 数组的定义 2 数组的概念 3 创建数组 4 遍历数组 5 重点 冒泡排序 三 函数 1 参数 2 返回
  • C++与 python 变量生存周期比较

    1 C 中变量生存周期 参考 https blog csdn net darkxiaoming article details 70232620 在C 中变量有以下两种生存周期 变量由编译程序在编译时给其分配存储空间 称为静态存储分配 并在
  • 错误 D8016 “/O2”和“/RTC1”命令行选项不兼容

    错误方式 Debug模式下 优化 最大优化 基本运行时检查 两者RTC1 正确 最大优化 默认值 优化 最大优化 O2 基本运行时检查 设置 默认值
  • LInux下几种定时器的比较和使用

    在数据通信过程中 会遇到对数据发送时间的格式要求 所以要在应用中根据实际要求选择不同的定时器 就要考虑到几种应用定时器的特点 定时器文章参考 一般而言有 1 sleep usleep和nanosleep sleep 和nanosleep 都
  • C语言:利用函数递归实现计算n!。

    C语言 利用函数递归实现计算n include
  • 简单javascript的使用

    1 javascript的简介 是基于对象和事件驱动的语言 应用于客户端 基于对象 提供了好多对象 可以直接拿过来使用 事件驱动 html做网站静态效果 javascript动态效果 客户端 专门指浏览器 js的特点 1 交互性 信息的动态
  • 【Python文件的使用】

    文章目录 一 文件概述 1 文件类别 2 文件路径 3 文件的编码方式 二 文件操作 1 文件打开 2 文件读写 3 文件关闭 三 操作实例 一 文件概述 1 文件类别 文件是一个存储在辅助存储器上的数据序列 可以包含任何数据内容 概念上
  • 蓝桥杯.Java.数列排序

    问题描述 给定一个长度为n的数列 将这个数列按从小到大的顺序排列 1 lt n lt 200 输入格式 1 第一行为一个整数n 2 第二行包含n个整数 为待排序的数 每个整数的绝对值小于10000 输出格式 输出一行 按从小到大的顺序输出排
  • android 实现自动输入文本效果

    此控件的功能是帮助用户实现自动输入 例如当用户输入一个字符后 能够根据这个字符提示显示出与之相关的数据 里面用到了一个适配器来实现此功能 源代码如下 package com example autosearch import android
  • 土地调查图斑编号_土地年度变更调查“图斑类型”说明

    年 度 土 地 变 更 调 查 图 斑 类 型 年度土地变更调查 图斑类型 共分为11大类27个二级类 根据影像和数据库情况 分别填写相应数字代码 大类填写阿拉伯数字 小类填写大写的英文字母 如 1A 第1类 前时相影像有植被覆盖或明显非建
  • Java 多线程 --- 锁的概念和类型划分

    Java 多线程 锁的概念和类型划分 锁的概念 锁可以保证 原子性 可见性 有序性 乐观锁与悲观锁 公平锁与非公平锁 什么是可重入锁 独占锁与共享锁 轻量级锁和重量级锁 自旋锁 Spinlock 锁泄露 锁的概念 锁可以将多个线程对共享数据
  • 数据中心的拥塞控制(1)CN

    一 概述 CN来自于IEEE802 1Qau 它的目地是为带宽 时延积的量级为5Mbit或更小值的网络域中的长时间存在的流增加拥塞管理功能 这种流常存在于DCB网络 存储网络 计算机集群网络等环境中 因而DCB也常用在这些网络环境中 为了使
  • vue父子组件&继承组件的生命周期以及应用

    父子组件的生命周期顺序 今天在做项目时候 发现了一个问题 那就是父子组件的执行顺序问题 在我印象里 肯定是先执行父组件的生命周期 再执行子组件的生命周期 但其实并不是这样的 我们来看代码 我们先用vue cli搭建一个项目 用什么搭建并不重