当前位置: 首页 > article >正文

Vue中<script setup></script>的主要语法元素和特性

<script setup>是 Vue 3 中引入的一种新的组件内脚本语法糖,它带来了更简洁、高效的组件逻辑编写方式。

以下是 <script setup> 的主要语法元素和特性:

1.导入和使用

  • 直接在 <script setup> 中导入依赖,不需要在 componentsdirectives 等选项中声明。
  • 导入的组件和指令可以直接在模板中使用。

2.响应式数据:

  • 使用 ref 和 reactive 来创建响应式的数据。
  • ref 用于基本类型,reactive 用于对象。
  • 示例:
import { ref, reactive } from 'vue'

const count = ref(0)
const state = reactive({ message: 'Hello World' })

3.计算属性:

  • 使用 computed 来定义计算属性。
  • 示例:
import { computed } from 'vue'

const reversedMessage = computed(() => state.message.split('').reverse().join(''))

4.侦听器:

  • 使用 watch 和 watchEffect 来监听数据的变化。
  • 示例:
import { watch, watchEffect } from 'vue'

watch(count, (newVal, oldVal) => {
  console.log(`count changed from ${oldVal} to ${newVal}`)
})

watchEffect(() => {
  console.log(`current count value is: ${count.value}`)
})

5.生命周期钩子:

  • 可以直接在 <script setup> 中使用生命周期钩子,如 onMountedonUnmounted,onBeforeUpdateonUpdatedonBeforeUnmount 和 onUnmounted  等等。
  • 示例:
import { onMounted, onUnmounted } from 'vue'

onMounted(() => {
  console.log('Component mounted')
})

onUnmounted(() => {
  console.log('Component unmounted')
})

6.Props 解构:

  • 使用defineProps编译宏来定义组件接收的属性,它接收一个对象或者基于类型的声明。
  • 在组件使用时就能接收外部传入的对应属性值了,并且在模板中可以像使用普通变量一样使用props中的属性。
  • 使用 defineProps 接收父组件传递的 props。
  • 示例:
<template>
  <div>{{ title }}</div>
</template>

<script setup>
// 基于对象的方式定义props
const props = defineProps({
  title: String
})
// 基于类型的方式(如果使用TypeScript)
// const props = defineProps<{ title: string }>()
</script>

7.事件处理:

  • 使用defineEmits编译宏来声明组件向外触发的自定义事件。
  • 示例:
<template>
  <button @click="emitCustomEvent">触发事件</button>
</template>

<script setup>
const emits = defineEmits(['custom-event'])
const emitCustomEvent = () => {
  emits('custom-event', '传递的数据')
}
</script>

8. 默认导出:

       不再需要 export default,因为所有顶层绑定会自动暴露给模板。

9.解构 Props 和 Emits:

  • 直接解构 props 和 emit 而无需担心失去响应性。
  • 示例
const { title, isActive } = defineProps(['title', 'isActive'])
const emit = defineEmits(['update:title'])

10.访问父组件和根实例属性(有限制)

  • <script setup>中访问父组件或根实例的属性不像传统的this.$parentthis.$root那样方便,不过可以通过getCurrentInstance函数(但官方不建议过度依赖此方式用于普通场景,主要用于一些高级的、框架层面的扩展等情况)来获取组件实例相关信息。
  • 例如:
<script setup>
import { getCurrentInstance } from 'vue'
const instance = getCurrentInstance()
// 可以通过instance来访问一些实例相关信息,不过要谨慎使用
</script>


http://www.kler.cn/a/447523.html

相关文章:

  • 学生管理系统,增加教师管理,班级管理,角色功能权限管理
  • [python] 基于matplotlib实现雷达图的绘制
  • RabbitMQ消息可靠性保证机制7--可靠性分析-rabbitmq_tracing插件
  • 【libuv】Fargo信令1:client发connect消息给到server
  • BenchmarkSQL使用教程
  • Apache Solr RCE(CVE-2017-12629)--vulhub
  • redis开发与运维-redis02-redis数据类型与命令总结
  • 使用C++调用YOLOv8模型的一般步骤
  • 首次成功尝试!使用多模态无监督聚类的语义发现
  • MySQL -- 库的相关操作
  • 性能】JDK和Jmeter的安装与配置
  • 12爬虫:scrapy爬虫框架
  • Day13 苍穹外卖项目 工作台功能实现、Apache POI、导出数据到Excel表格
  • 本地部署 MLflow 服务
  • 中宇联与亚马逊云科技共同推出Well-Architected联合解决方案
  • redis开发与运维-redis03-redis其他数据类型与命令(Bitmaps++HyperLogLog+GEO)
  • 基于pytorch的深度学习基础3——模型创建与nn.Module
  • 设计模式中单例模式中懒汉模式的问题
  • APM32F411使用IIS外设驱动es8388实现自录自播
  • Mono里运行C#脚本2—参数配置
  • 如何在Java中使用封装好的API接口?
  • 【Leetcode 热题 100】124. 二叉树中的最大路径和
  • 混合开发环境---使用编程AI辅助开发Qt
  • NOI与USACO的关系
  • 博客系统(Java 实现详解)
  • 【最大似然估计】之Python实现