首页 > 其他分享 >详细讲述 Vue3 的 <script setup>

详细讲述 Vue3 的 <script setup>

时间:2024-08-22 15:23:38浏览次数:7  
标签:vue const script setup Vue3 组件 import message ref

<script setup> 是 Vue 3 引入的一种新的 <script> 标记的用法,其本质是一个语法糖。它极大简化了单文件组件(SFC)的开发体验,目的是让代码更简洁、易读,同时减少模板和逻辑之间的重复。

1. 基本用法

<!-- 使用 <script setup> -->
<template>
  <div>
    <p>message: {{ message }}</p>
    <button @click="handleClick" style="margin-top: 10px; padding: 2px 6px;">点击我</button>
  </div>
</template>

<script setup>
import { ref } from 'vue';
// 定义响应式变量
const message = ref('Hello, Setup!');
// 定义一个方法
const handleClick = () => {
  message.value = '点击按钮!';
};
</script>
<!-- 使用之前的方式 -->
<template>
  <div>
    <p>message: {{ message }}</p>
    <button @click="handleClick" style="margin-top: 10px; padding: 2px 6px">点击我</button>
  </div>
</template>

<script>
import { ref } from 'vue'
export default {
  setup() {
    const message = ref('Hello, Setup!')
    const handleClick = () => {
      message.value = '点击按钮!'
    }
    return {
      message,
      handleClick
    }
  }
}
</script>

 

从这个简单的例子可以看出, <script setup> 让代码更加简洁易懂。

2. 特点

1、自动绑定上下文,简化导入和使用

在 <script setup> 中,所有的变量、函数、引入的库都自动绑定到模版的上下文中,无需显式返回,可以直接在模版中使用。

2、优化编译性能

<script setup> 在编译阶段进行了大量的优化,减少运行时开销。

3、更好的类型推断

当使用 TypeScript 时, <script setup> 让类型推断更加精确,开发体验更好。

<template>
  <div>
    <p>当前计数: {{ count }}</p>
    <button @click="increment">增加</button>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue'
const count = ref<number>(0)
const increment = (): void => {
  count.value++
}
</script>

在 <script setup> 中加上 lang = 'ts',即表明这个文件是用 TypeScript 编写的,这样可以启用 TS 的类型检查和推断功能。 

3. 对比传统 <script> 

1、组件注册不需要手动处理,默认注册完成。

2、不需要使用 export default。

3、不需要使用 return 显式返回,<script setup> 最外层定义的对象、函数均自动返回,模版直接使用。

4、在 <script setup> 中,父组件拿不到子组件的实例成员,不能直接进行使用,这也是 vue 官方推荐的方法。可以使用 defineExpose 进行暴露,和原始样式的 expose 是一样。

<!-- 子组件 -->
<template>
  <div style="border: 1px solid pink;">
    <p>当前计数:{{ count }}</p>
  </div>
</template>

<script setup>
import { ref } from 'vue'
const count = ref(0)
const incrementCount = () => {
  count.value++
}
defineExpose({
  count,
  incrementCount
})
</script>
<!-- 父组件 -->
<template>
  <div class="container">
    <h2>父组件</h2>
    <MyComponent ref="MyComponentRef" />
    <button @click="childCount" class="btn">打印子组件的计数</button>
    <button @click="incrementChildCount" class="btn">增加子组件的计数</button>
  </div>
</template>

<script setup>
import MyComponent from './components/MyComponent.vue'
import { ref } from 'vue'

const MyComponentRef = ref(null)
const childCount = () => {
  console.log('访问子组件的 count: ', MyComponentRef.value.count)
}
const incrementChildCount = () => {
  MyComponentRef.value.incrementCount()
}
</script>

5、在 <script setup> 使用 defineProps 和 defineEmits。

举个

标签:vue,const,script,setup,Vue3,组件,import,message,ref
From: https://blog.csdn.net/weixin_52648900/article/details/141426805

相关文章

  • 044、Vue3+TypeScript基础,pinia库中getters的用法
    01、main.js代码如下://引入createApp用于创建Vue实例import{createApp}from'vue'//引入App.vue根组件importAppfrom'./App.vue'//第一步:引入piniaimport{createPinia}from'pinia'constapp=createApp(App);//第二步:创建pinia实例constpinia=......
  • setupres.dll丢失解决方案速递:全面修复流程,从简易排查至高级修复策略
    遇到setupres.dll文件丢失问题,可以按照以下步骤尝试修复:1.系统文件扫描:首先,利用系统自带的文件检查工具来修复潜在的系统文件问题。打开命令提示符(以管理员身份运行),输入sfc/scannow并回车,等待扫描并修复完成。2.Windows更新:确保操作系统是最新版本,因为有时这类问题可通......
  • JavaScript day-09
    目录1.从ECMA到W3C1.1API的概念1.2WebAPI的概念2.什么是DOM?3.DOM节点4.DOM节点树5.节点之间的关系6.获取元素节点6.1根据id获取元素6.2根据标签名获取元素6.3根据class获取元素6.4获取特殊元素7.修改节点7.1改变HTML内容7.2改变CSS样......
  • vue3解决跨域问题
     vue3登录提示错误 解决方法1,修改根目录下vite.config.ts文件 修改host、proxy、target,修改后文件如下(红色为修改),具体内容根据后台实际修改 server:{ host:'localhost', port:env.VITE_PORTasunknownasnumber, open:JSON.parse(env.VITE_OPEN),......
  • 043、Vue3+TypeScript基础,pinia库使用action,在函数中对存储数据进行修改
    01、main.js代码如下://引入createApp用于创建Vue实例import{createApp}from'vue'//引入App.vue根组件importAppfrom'./App.vue'//第一步:引入piniaimport{createPinia}from'pinia'constapp=createApp(App);//第二步:创建pinia实例constpinia=......
  • [vue3] vue3更新组件流程与diff算法
    在Vue3中,组件的更新通过patch函数进行处理。patch函数源码位置:core/packages/runtime-core/src/renderer.tsatmain·vuejs/core(github.com)constpatch:PatchFn=(n1,n2,container,anchor=null,parentComponent=null,parentSuspen......
  • 042、Vue3+TypeScript基础,pinia库存储数据修改的两种方式
    01、main.ts代码如下://引入createApp用于创建Vue实例import{createApp}from'vue'//引入App.vue根组件importAppfrom'./App.vue'//第一步:引入piniaimport{createPinia}from'pinia'constapp=createApp(App);//第二步:创建pinia实例constpinia=......
  • 【JavaScript】字符串01 - padStart() 和 padEnd()
    在JavaScript中,我们可以使用padStart()和padEnd()方法来完成字符串补全。下面给大家介绍一下这两个方法的使用。padStart()方法用于在当前字符串的前面填充指定的字符,直到字符串的长度达到指定的长度。padEnd()方法用于在当前字符串的后面填充指定的字符,直到字符串的长......
  • 041、Vue3+TypeScript基础,使用pinia库来储存数据
    01、输入npminstallpinia 02、main.js代码如下://引入createApp用于创建Vue实例import{createApp}from'vue'//引入App.vue根组件importAppfrom'./App.vue'//第一步:引入piniaimport{createPinia}from'pinia'constapp=createApp(App);//第二步......
  • TypeScript深度揭秘:Map的全方位详解、作用、特点、优势及实战应用和高级应用
            在TypeScript的广阔世界里,Map对象无疑是一个强大的存在,它提供了灵活且高效的键值对存储机制。今天,我们就来一场轻松而严谨的探秘之旅,全方位解析TypeScript中Map的定义、作用、特点、优势,并通过实战代码示例,带你领略Map的无穷魅力。引言Map是TypeScript(以及Ja......