vue | props 、script、script setup

文章介绍了Vue3中引入的<scriptsetup>语法糖,它简化了组件声明,无需显式声明和重复定义props。同时对比了与Vue2的差异,涉及CompositionAPI、性能优化、模块化和新的生命周期钩子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<script>
export default {
  props: {
    propA: String,
    propB: Number,
    propC: {
      type: Boolean,
      default: true
    },
    propD:Object,
  }
}
</script>

#####################################################
<script setup>
defineProps(['propA', 'propB', 'propC'])
</script>


###################################################

<script setup> 是Vue 3中引入的一个新的语法糖,旨在简化组件的编写。与传统的 <script> 不同,<script setup> 的目标是减少冗余代码,提高开发体验。

Props 的声明:

在 <script> 中,你需要显式声明组件的 props,并在 export default 中定义。
在 <script setup> 中,你使用 defineProps 来声明 props,使得声明更为简洁,而不需要在 export default 中重复。
Data 和 Methods:

在 <script> 中,你需要使用 data 函数来声明响应式的数据,而方法则需要在 methods 中定义。
在 <script setup> 中,你只需要直接使用变量声明和函数声明,而不需要额外的 data 和 methods 字段。Vue 会根据上下文自动推断数据是否是响应式的。
引入和导出:

在 <script> 中,你需要使用 import 导入其他模块,并在 export default 中导出组件。
在 <script setup> 中,你只需要写逻辑代码,不需要显式导入和导出,Vue 会自动处理。

#######################################################
vue2 和 vue3 的一些差别
Composition API:

Vue 3 引入了 Composition API,允许将代码按照逻辑关系组织,而不是选项对象的形式。这使得代码更容易组织和复用。
Vue 2 使用的是选项 API,而 Vue 3 提供了 Composition API 作为更灵活、强大的替代方案。
性能优化:

Vue 3 进行了多项性能优化,包括更好的虚拟 DOM 算法(基于 Proxy),提高了渲染效率。
Vue 3 的 Tree-shaking 支持更好,可以更有效地减小 bundle 大小。
模块化设计:

Vue 3 的内部进行了模块化设计,使得库的体积更小,可以更轻松地按需引入功能。
新的生命周期钩子:

Vue 3 引入了新的生命周期钩子,以更好地支持 Composition API。
TypeScript 支持:

Vue 3 对 TypeScript 的支持更为友好,提供了更好的类型推断和声明。

```vue
###########################################################
//vue2
//BlogPost.vue
<script >

export default{
  props:{
    title:String,
    zhang:String
  }
}
  
</script>

<template>
  <h4>{{ title }}</h4>
  <h1>{{zhang}}</h1>
</template>

###############################################################
<script setup>
//App.vue
import { ref } from 'vue'
import BlogPost from './BlogPost.vue'

  
const posts = ref([
  { id: 1, title: 'My journey with Vue' ,zhang:"zhangsan1"},
  { id: 2, title: 'Blogging with Vue' ,zhang:"zhangsan2"},
  { id: 3, title: 'Why Vue is so fun' ,zhang:"zhangsan3"}
])
</script>

<template>
	<BlogPost
  	v-for="post in posts"
	  :key="post.id"
  	:title="post.title"
		:zhang ="post.zhang"
	></BlogPost>
</template>

##############################################################
//vue3
//BlogPost.vue
<script setup>
defineProps(['title','zhang'])
</script>

<template>
  <h4>{{ title }}</h4>
  <h1>{{zhang}}</h1>
</template>

##################################################################
//App.vue
<script setup>
import { ref } from 'vue'
import BlogPost from './BlogPost.vue'
  
const posts = ref([
  { id: 1, title: 'My journey with Vue', zhang:"zhangsan1" },
  { id: 2, title: 'Blogging with Vue' ,zhang:"zhangsan2"},
  { id: 3, title: 'Why Vue is so fun' ,zhang:"zhangsan3"}
])
</script>

<template>
	<BlogPost
  	v-for="post in posts"
	  :key="post.id"
  	:title="post.title"
		:zhang ="post.zhang"
	></BlogPost>
</template>

#################################################
v-if v-else

<script setup>
import { ref } from 'vue'

const awesome = ref(true)
</script>

<template>
  <button @click="awesome = !awesome">click</button>

	<h1 v-if="awesome">Vue is awesome!</h1>
	<h1 v-else>Oh no 😢</h1>
</template>
################################################################
if
else if
else if
else

<div v-if="type === 'A'">
  A
</div>
<div v-else-if="type === 'B'">
  B
</div>
<div v-else-if="type === 'C'">
  C
</div>
<div v-else>
  Not A/B/C
</div>
#############################################################################
更新
<template v-if="ok">
  <h1>Title</h1>
  <p>Paragraph 1</p>
  <p>Paragraph 2</p>
</template>

####################################################################
reactive 和ref

参考这篇

在这里插入图片描述

Vue 3中,使用`<script lang='ts' setup>`标签可以声明props。有几种不同的方式可以声明props。 1. 使用`defineProps`API:此方式只能设置参数类型和是否必传。在`defineProps`中定义一个类型,可以使用TypeScript特性进行限定。例如: ```javascript const props = defineProps<{ either: '必传且限定'|'其中一个'|'值', child?: string|number, strData?: string, arrFor: any[] }>(); ``` 2. 使用`withDefaults`和`defineProps`:在第一种方式的基础上,增加了设置prop默认值的功能。例如: ```javascript interface Props { either: '必传且限定'|'其中一个'|'值', child: string|number, sda?: string, strData: string, msg?: string, labels?: string[], obj?:{a:number} } const props = withDefaults(defineProps<Props>(), { msg: 'hello', labels: () => ['one', 'two'], obj: () => { return {a:2} } }); ``` 3. 运行时声明的方式:只能设置参数类型、默认值、是否必传、自定义验证。此方式报错为控制台warn警告,无法提供编辑器代码提示功能。例如: ```javascript const props = defineProps({ child: { type:String, default: 1, required: true, validator: value => { return value >= 0 } }, sda: String, strData: String, arrFor: Array }); ``` 综上所述,Vue 3的`<script lang='ts' setup>`标签可以用来声明props,提供不同的方式来设置参数类型、默认值、是否必传和自定义验证。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【vue3 <script setupprops 使用与讲解】defineProps、withDefaults 类型限制、默认值设置](https://blog.csdn.net/m0_67401228/article/details/123304831)[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_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值