Vue3之setup参数介绍

这篇具有很好参考价值的文章主要介绍了Vue3之setup参数介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

setup(props, context) {
	...
}

一、参数

使用setup函数时,它将接受两个参数:

  • props
  • context

让我们更深入地研究如何使用每个参数

二、Props

setup函数中的第一个参数是props。正如在一个标准组件中所期望的那样,setup函数中的props是响应式的,当传入新的prop时,它将被更新。

export default {
	props: {
		title: String
	},
	setup(props, context) {
		console.log(props.title)
		...
	}
}

Warning:因为props是响应式的,你不能使用ES6解构,因为它会消除prop的响应式。

如果需要解构prop,可以通过使用setup函数中的toRefs来安全地完成此操作

import { toRefs } from 'vue

export default {
	props: {
		title: String
	},
	setup(props, context) {
		const { title } = toRefs(props)
		console.log(title.value)
		...
	}
}

三、context

context参数是一个普通的javascript对象,它对组件暴露三个属性:attrs、slots、emit。

export default {
	setup(props, context) {
		// Attribute(非响应式对象)
		console.log(context.attrs)
		
		// 插槽(非响应式对象)
		console.log(context.slots)
		
		// 触发事件(方法)
		console.log(context.emit)
	}
}

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

export default {
	setup(props, { attrs, slots, emmit }) {
		...
	}
}

attrs和slots是有状态的对象,它们总是会随组件本身的更新而更新。这意味着你应该避免对它们进行解构,并始终以attrs.x或slots.x的方式引用property。

请注意,与props不同,attrs和slots是非响应式的。如果你打算根据attrs或slots更改应用副作用,那么应该在onUpdated生命周期钩子中执行此操作。

访问组件的property

执行setup时,组件实例尚未被创建。因此,你只能访问以下property:

  • props
  • attrs
  • slots
  • emit

换句话说,你将无法访问以下组件选项:

  • data
  • computed
  • methods

在setup()内部,this不会是该活跃实例的引用因为setup()是在解析其他组件选项之前被调用的,所以setup()内部的this的行为与其他选项中的this完全不同。这在和其他选项式 API一起使用setup()时可能会导致混淆。

1、attrs

用途:当父组件传递数据给子组件时,子组件不通过props接收,那么父组件传递的数据就到了setup中的context的attrs属性。

<div id="app">
<!-- 父组件传递数据给子组件 -->
<son webName="自如初"></son>
</div>

<script>
const app = Vue.createApp({
});

// 子组件不使用props接收
app.component('son', {
 template:`<div>son</div>`,

 setup(props, context) {
  const { attrs, slots, emit} = context;
  // 打印父组件传递的数据
  console.log(attrs.webname);
  return {};
 }
});
const vm = app.mount('#app');
</script>

2、slots

用于接收渲染父组件传递的插槽内容

<div id="app">
<son>
 父组件通插槽传递的内容
</son>
</div>

<script>
const app = Vue.createApp({
});

app.component('son', {
 template:`<div>son</div>`,

 setup(props, context) {
  const { h } = Vue;
  const { attrs, slots, emit} = context;
 
  // 显示父组件传递的内容
  return () => h('p', {}, slots.default());
 }
});
const vm = app.mount('#app');
</script>

3、emit

向父组件触发事件。

<div id="app">
<!-- 4、父组件监听子组件发射的事件 -->
<son @sclick="getData"></son>
</div>

<script>
const app = Vue.createApp({
 methods: {
  // 5、实现事件
  getData () {
   alert(1)
  }
 }
});

app.component('son', {
 // 1、子组件中绑定事件
 template:`<div @click="sonClick">son</div>`,

 setup(props, context) {
  const { attrs, slots, emit} = context;
 
  function sonClick() {
   // 2、通过 emit 向父组件发射事件
   emit('sclick');
  }

   // 3、对外暴露该事件
  return { sonClick };
 }
});
const vm = app.mount('#app');
</script>

4、使用渲染函数

setup还可以返回一个渲染函数,该函数可以直接使用在同一作用域中声明的响应式状态:
setup(props),VUE3,前端,vue
setup(props),VUE3,前端,vue文章来源地址https://www.toymoban.com/news/detail-566906.html

到了这里,关于Vue3之setup参数介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue3 - props

    props 用于接收父组件传递的值 在使用 script setup 的单文件组件中,props 可以使用 defineProps() 宏来声明: 在没有使用 script setup 的组件中,prop 可以使用 props 选项来声明(和vue2一致): 传递给 defineProps() 的参数和提供给 props 选项的值是相同的,两种声明方式背后其实使用的都

    2024年02月05日
    浏览(69)
  • vue3中的Props

    一个组件需要显示声明它所接受的props,这样vue才能知道外部传入的哪些是props,哪些是透传attribute 在使 script setup 的单文件中,props可以使用 ==defineProps()==宏来声明: 在没有使用 script setup 的组件中,prop可以使用props选项来声明: 注意传递给 defineProps 的参数和提供给props选项

    2024年02月08日
    浏览(37)
  • Vue3 props的使用详解

    Props 声明 1、字符串数组声明props  2.对象实现props 你还可以使用类型标注,这是ts的特性。 3、使用camelCase(小驼峰命名法),可以在模板中直接使用(如第一个例子)。看代码 4、动态绑定props 注意事项:defineprops在之前的Vue版本中需要引入,但是现在是不需要了。上面几个例子

    2024年02月16日
    浏览(49)
  • Vue3——第十二章(Props)

    一个组件需要显式声明它所接受的 props,这样 Vue 才能知道外部传入的哪些是 props,哪些是透传 attribute 在使用 script setup 的单文件组件中,props 可以使用 defineProps() 宏来声明: 在没有使用 script setup 的组件中,prop 可以使用 props 选项来声明: 注意传递给 defineProps() 的参数和提

    2023年04月09日
    浏览(53)
  • vue3 监听props 的变化

    再三说明 仅仅个人学习用,不误导别人 我觉得props 会创建对应的属性,去接受这些值,比如传递一个ref的基本值 age props.age = age.value 传递一个ref的引用值 person props.person= person.value 传递一个reactive的引用值 person props.person= person 最开始时候,props指向了一个响应式的reactive pe

    2024年02月11日
    浏览(39)
  • vue3 01-setup函数

    1.setup函数的作用: 一开始创建vue3页面的时候是这样的 给容器传参在页面中显示 数据给模板使用,以前是data选项中即可,现在在setup中直接定然后返回,模板中即可使用 3.通过打印方式发现setup函数比beforeCreate 执行更早;setup中没有this组件实例 4.通过点击事件控制台显示内容 5.通

    2024年02月11日
    浏览(36)
  • vue3中的setup方法

    在介绍v3的setup之前,我们先来看看在v2中是如何定义变量和方法的 如上面的示例,在v2中我们定义变量要写在data方法中,方法要写在methods中 那么我们用v3中的setup同样完成上面案例,如下: 可以看到,我们只需在setup方法中定义变量和函数,最后通过return将变量和函数暴露出

    2024年02月12日
    浏览(40)
  • vue3 script setup

    解决在使用vue 3 composition API(组合式API)时繁琐的问题,比如定义一个方法,模板需要使用该方法,就必须将方法返回,当组件中存在大量方法和属性时就很麻烦。 一、什么是script setup 二、script setup什么作用 1.自动注册子组件 2.属性和方法无需返回 3.支持props、emit、context scr

    2024年02月09日
    浏览(41)
  • Vue3技术1之Vue3简介、创建Vue3工程、分析工程结构、安装开发者工具与初识setup

    2020年9月18日,Vue.js发布3.0版本,代号:One Piece(海贼王) github上的tags地址:https://github.com/vuejs/vue-next/releases/tag/v3.0.0 性能的提升、源码的升级、更好的支持TypeScript、新的特性 官方文档 确保vue/cli版本在4.5.0以上 vue --version 安装或者升级@vue/cli npm install -g @vue/cli 创建 vue crea

    2023年04月11日
    浏览(49)
  • 前端测试指南:Vue3 测试工具介绍与使用

    1.1 前端测试的重要性 在现代前端开发中,测试已经成为了必不可少的一环。测试可以保证代码的质量、可维护性和可靠性,防止代码的潜在错误和漏洞。同时,测试可以让开发者更加自信地提交代码和合并代码,以及更快地解决问题。因此,测试已经成为了前端开发中不可

    2024年02月10日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包