11.vue学习笔记(组件生命周期+生命周期应用+动态组件+组件保持存活)

1.组件生命周期
每个Vue组件实例在创建时都需要经历一系列的初始化步骤,比如设置好数据侦听,编译模板,挂载实例到DOM,
以及在数据改变时更新DOM。
在此过程中,它会运行被称为生命周期钩子的函数,让开发者在特定阶段运行自己的代码
有关创建:beforeCreate/created
有关渲染:beforeMount/mounted
有关更新:beforeUpdate/updated
有关卸载:beforeUnmount/unmounted
作用:在特定时期运行自己的代码

在这里插入图片描述

<template>
  <h3>组件的生命周期</h3>
  <button @click="updateHandle">更新事件</button>
  <p>{{ msg }}</p>
</template>
<script>
export default{
  data(){
    return{
      msg:"更新之前"
    }
  },
  methods:{
    updateHandle(){
      this.msg = "更新之后"
    }
  },
  /** 
   * 生命周期函数:
   *    创建期:beforeCreate(组件即将创建)/created(组件已经创建完成,但还没显示)
   *    挂载期:beforeMount(准备渲染)/mounted(组建渲染完成:页面可以看到)
   *    更新期:beforeUpdate(更新前)/updated(更新后)
   *    销毁期:beforeUnmount(组件销毁前)/unmounted(组件销毁后)
   */
  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>
2.生命周期应用
常见应用场景:
	通过ref获取元素DOM结构
	模拟网络请求渲染数据
2.1通过ref获取元素DOM结构

在这里插入图片描述

2.2.模拟网络请求渲染数据

在这里插入图片描述

3.动态组件
有些场景会需要在两个组件间来回切换,比如Tab界面
3.1.A,B两个组件

在这里插入图片描述

<template>
  <component :is="tabComponent"></component>
  <button @click="changeHandle">切换组件</button>
</template>
<script>
import ComponentA from './components/ComponentA.vue';
import ComponentB from './components/ComponentB.vue';

export default{
  data(){
    return{
      tabComponent: "ComponentA"
    }
  }, 
  components:{
    ComponentA,
    ComponentB
  },
  methods:{
    changeHandle(){

      this.tabComponent = this.tabComponent == "ComponentA" ? "ComponentB":"ComponentA"
    }
  }
}

</script>
4.组件保持存活(销毁期)
当使用<component :is="……"></component>来在多个组件间作切换时,被切换掉的组件会被卸载.

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

我们可以通过使用<keep-alive>组件强制被切换掉的组件仍然保持存活状态

在这里插入图片描述

<template>
  <keep-alive>
    <component :is="tabComponent"></component>
  </keep-alive>
  <button @click="changeHandle">切换组件</button>
</template>
<script>
import ComponentA from './components/ComponentA.vue';
import ComponentB from './components/ComponentB.vue';

export default{
  data(){
    return{
      tabComponent: "ComponentA"
    }
  }, 
  components:{
    ComponentA,
    ComponentB
  },
  methods:{
    changeHandle(){

      this.tabComponent = this.tabComponent == "ComponentA" ? "ComponentB":"ComponentA"
    }
  }
}

</script>
_____________________________________________________________________________________________
<template>

    <h3>ComponentA</h3>
    <p>{{ message }}</p>
    <button @click="updateHanele">更新数据</button>
</template>
<script>
export default{
    data(){
        return{
            message: "老数据"
        }
    },
    beforeUnmount(){
        console.log("组件卸载之前");
    },
    unmounted(){
        console.log("组件卸载之后");
    },
    methods:{
        updateHanele(){
            this.message = "新数据"
        }
    }
}
</script>
_____________________________________________________________________________________________
<template>

    <h3>ComponentB</h3>
</template>
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值