vue3--setup&生命周期

学习工具(方便、无需自己搭建环境)

Vue SFC Playground :https://sfc.vuejs.org/

image.png

setup

setup是组合Composition API中的入口函数,也是第一个要使用的函数。

setup只在初始化时执行一次,所有的Composition API函数都在此使用。

生命周期

setup执行在beforeCreate和created之前

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

<script lang="ts">
import { defineComponent, onBeforeMount, onMounted } from 'vue'
export default defineComponent({
  name: 'App',
  beforeCreate () {
    console.log('beforeCreate')
  },
  created () {
    console.log('created')
  },
  setup () {
    console.log('setup')
    onBeforeMount(() => {
      console.log('onBeforeMount')
    })
    onMounted(() => {
      console.log('onMounted')
    })
  }
})
</script>

image.png

可以推断出setup执行的时候,组件对象还没有创建,组件实例对象this还不可用,此时thisundefined, 不能通过this来访问data/computed/methods/props

父子组件生命周期

  1. 子组件onMounted 在父组件之前
  2. 子组件onUpdated 在父组件之前

父组件

<template>
<div class="container">
 父组件-->{{msg}}
 //子组件
<ChildItem :msg="msg" :msg1="msg1"></ChildItem>
</div>
</template>


<script lang="ts">
import { defineComponent,ref, onBeforeMount, onMounted, onBeforeUpdate, onUpdated } from 'vue'
import ChildItem from './components/base/Child.vue'
export default defineComponent({
  name: 'App',
  components: {
    ChildItem

  },
  beforeCreate () {
    console.log('父beforeCreate')
  },
  created () {
    console.log('父created')
  },
  setup () {
    console.log('父setup')
    onBeforeMount(() => {
      console.log('父onBeforeMount')
    })
    onMounted(() => {
    //更新数据
    setTimeout(() => {
        msg.value = 'hello,1s后修改msg'
        console.log('msg 被修改')
      }, 1000)
      console.log('父onMounted')
    })
    onBeforeUpdate(() => {
      console.log('父onBeforeUpdate')
    })
    onUpdated(() => {
      console.log('父onUpdated')
    })
  }
})
</script>

Child.vue

<template>
  <div>子组件-->{{msg}}</div>

</template>

<script lang="ts">
import { defineComponent, onBeforeMount, onMounted, onBeforeUpdate, onUpdated } from 'vue'

export default defineComponent({
  name: 'ChildItem',
  props: {
    msg: {
      type: String,
      required: true
    }
  },
  beforeCreate () {
    console.log('子beforeCreate')
  },
  created () {
    console.log('子created')
  },
  setup (props, { attrs, slots, emit }) {
    console.log('子setup')
    onBeforeMount(() => {
      console.log('子onBeforeMount')
    })
    onMounted(() => {
      console.log('子onMounted')
    })
    onBeforeUpdate(() => {
      console.log('子onBeforeUpdate')
    })
    onUpdated(() => {
      console.log('子onUpdated')
    })
  }

})
</script>


image.png

Vue3中,使用组合式API的方式来编写组件,其中setup函数是必须的。在setup函数中,可以使用一些特定的生命周期钩子函数来处理组件的生命周期事件。具体的生命周期钩子函数如下: 1. beforeCreate:在实例初始化之后,数据观测和事件配置之前被调用。 2. created:在实例创建完成后被立即调用。在这一步,实例已经完成了数据观测、属性和方法的运算,但是还没有挂载到DOM中。 3. beforeMount:在挂载开始之前被调用,相关的render函数首次被调用。 4. mounted:实例挂载完成后调用,此时组件已经被渲染到页面上。 5. beforeUpdate:在数据更新之前调用,发生在虚拟DOM重新渲染和打补丁之前。可以在这个生命周期中对更新之前的状态做一些处理。 6. updated:在数据更新之后调用,发生在虚拟DOM重新渲染和打补丁之后。可以在这个生命周期中操作更新后的DOM。 7. beforeUnmount:在实例销毁之前调用。在这一步,实例仍然完全可用。 8. unmounted:在实例销毁之后调用,此时组件已经从页面中移除。 以上是Vue3中常用的生命周期钩子函数,在setup函数中可以根据需要选择合适的钩子函数来处理组件的生命周期事件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [教程10 Vue3的生命周期与方法(Typescript)+ Setup语法糖详解 + setup中的生命周期钩子(代码截图版)](https://blog.csdn.net/boxuestudio/article/details/129909122)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [vue3--setup&生命周期](https://blog.csdn.net/weixin_44748205/article/details/124868197)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [vue3 + vite入门级资料 (基于vue2和前端基础)](https://download.csdn.net/download/BB_zhan/87274026)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值