一文了解setup的含义以及使用方法?



提示:以下是本篇文章正文内容,下面案例可供参考

一、setup是什么?

setup就是Vue3的一个新的语法糖,在setup函数中,所有的ES模块导出都被认为是暴露给上下文的值,并且包含在setup()返回对象中,那么相对于之前的写法,使用之后呢也会变得更加简单
注意:

  • 如果将setup写在script标签中的话,那么内容就不再需要去暴露
  • 如果使用setup()这种形式去写,就会需要return去进行暴露

二、调用的时机

创建组件实例,然后初始化props,紧接着就调用setup函数。从生命周期钩子的视角来说,它会在beforeCreate钩子之前被调用


三、setup的使用

<template>
  <div class="sett">
    <h1>{{ msg }}</h1>
    <h2>{{ obj.name }}</h2>
    <h2>{{ obj.age }}</h2>
    <p>{{ obj.todo[0] }}</p>
    <p>{{ number }}</p>
    <br />
    <button @click="changeName">更改name</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      obj: {
        name: "张三",
        age: 20,
        todo: [1, 2, 3],
      },
    };
  },
  //使用setup
  setup() {
    console.log("set up");
    //利用const或者let来定义变量和方法
    let number = 66;
    //将内容进行返回暴露
    return {
      number,
    };
  },
  created() {
    console.log("created");
  },
  methods: {
    changeName() {
      // this.obj.name='田嘉玲'
      this.obj.todo[0] = 11;
    },
  },
  props: {
    msg: String,
  },
};
</script>

<style scoped>
.sett {
  text-align: center;
  height: 800px;
  width: 800px;
  margin-left: 120px;
  line-height: 50px;
  background: pink;
}
</style>

总结

1、setup 函数时,它将接受两个参数:(props、context(包含attrs、slots、emit))
2、setup函数是处于 生命周期函数 beforeCreateCreated两个钩子函数之前的函数
3、执行 setup 时,组件实例尚未被创建(在 setup() 内部,this 不会是该活跃实例的引用,即不指向vue实例,Vue 为了避免我们错误的使用,直接将 setup函数中的this修改成了 undefined)
4、与模板一起使用:需要返回一个对象 (在setup函数中定义的变量和方法最后都是需要return出去的 不然无法再模板中使用)
5、使用渲染函数:可以返回一个渲染函数,该函数可以直接使用在同一作用域中声明的响应式状态

注意事项

  1. setup函数中不能使用this。vue为了避免我们错误的使用,直接将setup函数中的this修改为undefined
  2. setup函数中的props是响应式的,当传入新的prop时,将会被更新,但是因为props是响应式的,不能再使用ES6结构,因为会消除prop的响应性
  3. 如果需要解构 prop,可以通过使用 setup 函数中的 toRefs 来完成此操作:
import { toRefs } from 'vue'
 
setup(props) {
	const { title } = toRefs(props)
 
	console.log(title.value)
}

另外:context 是一个普通的 JavaScript 对象,也就是说,它不是响应式的,这意味着你可以安全地对 context 使用 ES6 解构

setup(props, { attrs, slots, emit }) {
    ...
  }
}

3、 setup()内使用响应式数据时,需要通过.value获取

import { ref } from 'vue'
 
const count = ref(0)
console.log(count.value) // 0

4、从 setup() 中返回的对象上的 property 返回并可以在模板中被访问时,它将自动展开为内部值。不需要在模板中追加 .value
5、setup函数只能是同步的不能是异步的

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值