vue3 setup(详细)使用教程

24 篇文章 1 订阅

vue3 setup(详细)使用教程

文章目录

在这里插入图片描述

1:为什么使用setup

当项目变大时,一个方法(methods)、一个数据(data)、一张表,相同的逻辑代码出现在多个地方,给维护带来很大的不便。 setup的出现就是为了解决这个问题。

2:创建vue3项目

开始之前首先确认vue cli 版本:Vue CLI 4.x

vue --version

安装 vue cli 4.x

npm install -g @vue/cli

创建基于vue3的项目:

vue create vue3

选择 vue3:

在这里插入图片描述
点击回车安装。

3:在组件中编写setup方法

<template>
  <div class="hello">
    <h1>{{ name }}</h1>
  </div>
</template>
<script>
export default {
  name: "hello",
  setup(msg) {
    console.log(msg);
    return { name:"Mr liu" };
  },
};
</script>
<style scoped>
</style>

如果一切正常,你将看到此输出:

在这里插入图片描述

4:setup生命周期

4.1:执行时机

setup 会在 beforeCreate 之前执行。

export default {
  name: "hello",
  setup(msg) {
    console.log(msg);
    return { name:"Mr liu" };
  },
  beforeCreate(){
    console.log("beforeCreate");
  }
};

在这里插入图片描述

4.2:setup 包含的生命周期

  • onBeforeMount——挂载开始前调用
  • onMount——挂载后调用
  • onBeforeUpdate——当响应数据改变,且重新渲染前调用
  • onUpdated——重新渲染后调用
  • onBeforeUnmount——Vue实例销毁前调用
  • onUnmounted——实例销毁后调用
  • onActivated——当keep-alive组件被激活时调用
  • onDeactivated——当keep-alive组件取消激活时调用
  • onErrorCaptured——从子组件中捕获错误时调用

比如:onMounted

import { onMounted } from 'vue'
export default {
  name: "hello",
  setup(msg) {
    onMounted(()=>{
      console.log("onMounted");
    })
    console.log(msg);
    return { name:"Mr liu" };
  },
  beforeCreate(){
    console.log("beforeCreate");
  }
};

5:setup使用ref对数据进行响应式绑定

响应式绑定:使用ref

<template>
  <div class="hello">
    <h1>{{ name }}</h1>
    <h5>count:{{count}}</h5>
  </div>
</template>
<script>
import { onMounted } from 'vue'
export default {
  name: "hello",
  setup(msg) {
    onMounted(()=>{
      console.log("onMounted");
    })
    console.log(msg);

    //创建定时器增加count值
    let count = 1;
    setInterval(()=>{
      count++
    },1000)
    return { name:"Mr liu",count:count };
  },
  beforeCreate(){
    console.log("beforeCreate");
  }
};
</script>
<style scoped>
</style>

虽然我们创建了定时器增加count的值,但视图并未发生变化。
在这里插入图片描述
换成 ref 赋值:

	//创建定时器增加count值
    let count = ref(1);
    setInterval(()=>{
      count.value++
    },1000)
    return { name:"Mr liu",count:count };

ref接受参数并返回它包装在一个带有value属性的对象中,然后可以使用该属性访问或改变反应变量的值

别忘了引入ref

import { ref,onMounted } from 'vue'

接下来视图的数据会一直变化。

在这里插入图片描述

6:setup使用watch和computed

6.1:对变化做出反应 watch

使用 watch 监听count的变化:

import { ref, onMounted, watch } from "vue";
export default {
  name: "hello",
  setup(msg) {
    onMounted(() => {
      console.log("onMounted");
    });
    console.log(msg);
    //创建定时器增加count值
    let count = ref(1);
    setInterval(() => {
      count.value++;
    }, 1000);
    watch(count, (newValue, oldValue) => {
      console.log(newValue,oldValue);
      console.log(count.value);
    });
    return { name: "Mr liu", count: count };
  },
  beforeCreate() {
    console.log("beforeCreate");
  },
};

6.2:使用 computed 计算count的值:

	let count2 = computed(()=>count.value*2);
    return { name: "Mr liu", count: count2 };

数据将会展示出:2 4 6 8…

7:setup看起来似乎更笨重了

当代码多的时候,看起来似乎没有解决问题,反而看起来很笨重。

我们可以将代码分成多个部分并引入:

新建 mycount.js 文件:

import { ref } from 'vue'
export default function mycount(){
    //创建定时器增加count值
    let count = ref('1');
    setInterval(()=>{
        count.value++
    },1000)
    return{
        count:count
    }
}

引入 mycount 文件:

import mycount from '../../util/count';
export default {
  name: "hello",
  setup() {
    let {count} = mycount();
    return { name: "Mr liu" ,count};
  },
  beforeCreate() {
    console.log("beforeCreate");
  },
};

count的值会实时变化并更新视图。

8:关于 props 的值

父组件给子组件传值 user:'anny'

子组件setup可以取出该值:

import mycount from '../../util/count';
export default {
  name: "hello",
  props:{
    user:String
  },
  setup(msg) {
    console.log(msg.user)
    let {count} = mycount();
    return { name: "Mr liu" ,count};
  },
  beforeCreate() {
    console.log("beforeCreate");
  },
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、付费专栏及课程。

余额充值