vue3 的setup和生命周期

vue3 的setup和生命周期

许多文章认为setup执行时间在beforeCreate 和created 之间,但是通过实际测试发现setup调用在beforecreate之前。

export default {
   
	beforeCreate() {
   
        console.log('beforeCreate running....');
    },
    created() {
   
        console.log("created running");
    },
    mounted() {
   
        console.log("mounted running");
    },
    setup() {
   
        let info = ref(0);
        const ins = getCurrentInstance();
        console.log('setup running....');
        return{
   }
        }
}

执行结果:
在这里插入图片描述
setup确确实实是最先执行了。
在vue3中setup代替了beforeCreate和created,函数里面无法使用data和methods方法中的数据。setup是集成性api,setup中定义的变量和方法,如在template模板中使用,变量需要使用ref或者reactive关键字定义,并且将使用到的方法和变量return出去,不然页面没有效果还报错的。

  • ref 用于定义基本数据加粗样式类型,比如string、number、boolean等。ref的本质其实还是reactive,当我们给ref函数传递一个值之后,ref函数会自动的转化成{value: xx},只是中间自动帮我们套了一层value。const name = ref(1) => name: {value: 1}
  • reactive用于定义复杂数据类型,比如数组、对象等。

在setup 中,有9个旧的生命周期钩子可以访问:

beforeCreate -> use setup()
created -> use setup()
其中setup函数是整合 created跟 beforeCreat
beforeMount ->onBeforeMount (挂载前)
mounted -> onMounted (挂载后)
beforeUpdate -> onBeforeUpdate**(更新前)**
updated -> onUpdated (更新后)
beforeDestroy -> onBeforeUnmount ( 销毁前)
destroyed ->onUnmounted ( 销毁后)

通过解构赋值的方式即可引入:

import {
    onBeforeMount, onMounted, onBeforeUpdate, onUpdated, onBeforeUnmount, onUnmounted, onActivated, onDeactivated, onErrorCaptured } from 'vue'

export default {
   
  setup() {
   
    onBeforeMount(() => {
   
      // ... 
    })
    onMounted(() => {
   
      // ... 
    })
    onBeforeUpdate(() => {
   
      // ... 
    })
    onUpdated(() => {
   
      // ... 
    })
    onBeforeUnmount(() => {
   
      // ... 
    })
    onUnmounted(() => {
   
      // ... 
    })
    onActivated(() => {
   
      // ... 
    })
    onDeactivated(() => {
   
      // ... 
    })
    onErrorCaptured(() => {
   
      // ... 
    })
  }
}

setup 函数将接收两个参数,props&context

注意:setup函数里面是没有this对象的,使用它的话会报 undefined。

  • setup 函数将接收两个参数,props&context
    第一个参数props,主要是用来获取属性传值,在使用之前必须现在Vue的props属性中先声明,才能在setup函数的第一个参数中获取到。
<template>
  <ButtonClick :name="'MyButton'" />123
</template>
import {
    getCurrentInstance, ref } from 'vue'

export default {
   
    props: {
   
        name: String
    },
    setup(props,ctx) {
   
        let info = ref(0);
        const ins = getCurrentInstance();
        console.log("props.name",props.name)
        return {
   
            info, handleClick, secondClick, thirdClick
        }

    }
}

在这里插入图片描述

- 第二个参数:context
和props一样的用法, 但是不写也可以用,context参数是一个普通的javascript对象,它对组件暴露三个属性:attrs、slots、emit。
attrs和slots是有状态的对象,它们总是会随组件本身的更新而更新。这意味着你应该避免对它们进行解构,并始终以attrs.x或slots.x的方式引用property。attrs和slots是非响应式的。应该在onUpdated生命周期钩子中执行此操作。

attrs:当父组件传递数据给子组件时,子组件不通过props接收,那么父组件传递的数据就到了 setup中的context的attrs属性。
slots:用于接收渲染父组件传递的插槽内容。
emit:向父组件触发事件。

相关推荐

  1. vuesetup中能调用哪些生命周期

    2024-02-07 07:22:05       49 阅读
  2. Vue3生命周期Vue2生命周期对比

    2024-02-07 07:22:05       60 阅读
  3. vue3生命周期

    2024-02-07 07:22:05       25 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-07 07:22:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-07 07:22:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-07 07:22:05       82 阅读
  4. Python语言-面向对象

    2024-02-07 07:22:05       91 阅读

热门阅读

  1. C++哈希表map映射

    2024-02-07 07:22:05       50 阅读
  2. Vue组件通信的方式

    2024-02-07 07:22:05       49 阅读
  3. 【trie 字典树】( RAII | Multiset频次统计 | STL )

    2024-02-07 07:22:05       52 阅读
  4. k8s etcd备份与恢复

    2024-02-07 07:22:05       48 阅读
  5. R语言入门笔记2.2

    2024-02-07 07:22:05       49 阅读
  6. 【Scala】 2. 函数

    2024-02-07 07:22:05       51 阅读
  7. 【Scala 】3. 类和对象

    2024-02-07 07:22:05       51 阅读
  8. 设计模式(行为型模式)责任链模式

    2024-02-07 07:22:05       50 阅读