setup和生命周期

264 阅读2分钟

setup()函数是在created生命周期函数被完全初始化之前执行的函数。所以不能使用this
通过ref()和reactive( )函数的使用,可以完全替换掉以前的data{}语法形式。
使用组合式API没有 beforeCreate 和 created 这两个生命周期

setup 返回的是一个对象,这个对象的属性会与组件中 data 函数返回的对象进行合并,返回的方法和 methods 合并,合并之后直接可以在模板中使用,如果有重名的情况,会使用 setup 返回的属性和方法,methods 和 data 能够拿到 setup 中的方法应该进行了合并,反之 setup 不能拿到它们的属性和方法,因为这个时候 this = undefined

  • onBeforeMount
    在挂载开始之前被调用:相关的 render 函数首次被调用。
  • onMounted
    组件挂载时调用
  • onBeforeUpdate
    数据更新时调用,发生在虚拟 DOM 打补丁之前。这里适合在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器。
  • onUpdated
    由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子
  • onBeforeUnmount
    在卸载组件实例之前调用。在这个阶段,实例仍然是完全正常的。
  • onUnmounted
    卸载组件实例后调用。调用此钩子时,组件实例的所有指令都被解除绑定,所有事件侦听器都被移除,所有子组件实例被卸载。
  • onErrorCaptured
    Vue 实例有一个 onErrorCaptured 钩子,每当事件处理程序或生命周期钩子抛出错误时,Vue 会调用该钩子。
    return false 错误不会冒泡到父级组件
    return true 错误不会冒泡到父级组件 不消费事件 控制台抛出异常
    ★只捕获嵌套组件中的错误,同级view不会捕获

**

<template>
  <span id="count">{{ count }}</span>
  同组件不会经过<button @click="notAMethod">Throw</button>
  子组件方式会经过 <test></test>
</template>
<script setup>
import { defineComponent, onErrorCaptured, ref } from 'vue'
// Vue 不会调这个钩子,因为错误发生在这个 Vue 实例中,而不是子组件。
onErrorCaptured(err => {
  console.log('Caught error', err.message)
  return false
})
</script>
  • onRenderTracked
    注册一个调试钩子,当组件的渲染效果跟踪到响应性依赖项时,调用。
    此挂钩仅在开发模式下运行,在服务器端渲染期间不调用。
    vue.js文件从3.2.0开始改变了只会在页面渲染的时候执行一次,局部更新不执行;
  • onRenderTriggered
    当虚拟 DOM 重新渲染被触发时调用。数据更新视图更新时触发
  • onActivated
    被 keep-alive 缓存的组件激活时调用。
  • onDeactivated
    被 keep-alive 缓存的组件停用时调用

简书原文链接在这,纯搬!setup和生命周期 - 简书 (jianshu.com)