Vue3 编程流畅技巧使用 setup 语法糖

193 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第26天,点击查看活动详情

前言

Vue3.2 setup 语法糖 单文件组件的语法糖 <script setup>

如果你对 Vue3 语法糖有一定了解,配和我另外一篇一起食用更好哦!Vue3 必学技巧 - Vue3 编程流畅技巧自定义 Hooks

阅读本文,默认你已经对 Vue3.0 的 composition API 有一定了解,但困扰于 setup 函数内需要繁琐 return 相关的变量和函数,那 setup 的语法糖 <script setup> 你将收获满满。语法糖 <script setup> 的引入让你写 Vue3 更爽,让 Vue3 更丰满。

本文是在官方文档基础上写的,如果有时间,建议上官方文档上看,本文写得更为语义化和通俗,希望你能喜欢。

<script setup> 是在单文件组件 (SFC) 中使用组合式 API 的编译时语法糖。

解决 Vue3.0 中 setup 需要繁琐将声明的变量、函数以及 import 引入的内容通过 return 向外暴露,才能在 <template/> 使用的问题。

setup>在 template 中使用

<script setup> 中无需 return 声明的变量、函数以及 import 引入的内容,即可在 <template/> 使用。

<script setup> 语法糖

<script setup>
//import引入的内容
import { getToday } from './utils'  
// 变量
const msg = 'Hello!'
// 函数
function log() {
  console.log(msg)
}
</script>
//在template中直接使用声明的变量、函数以及import引入的内容
<template>
  <div @click="log">{{ msg }}</div>
   <p>{{getToday()}}</p>
</template>

标准组件 <script> 需要写 setup 函数并繁琐 retrun。

<script>
//import引入的内容
import { getToday } from './utils'  
export default{
 setup(){
    // 变量
    const msg = 'Hello!'
    // 函数
    function log() {
      console.log(msg)
    }
    //想在tempate里面使用需要在setup内return暴露出来
    return{
       msg,
       log,
       getToday 
    }
 }
}
</script>
<template>
  <div @click="log">{{ msg }}</div>
   <p>{{getToday()}}</p>
</template>

小结: <script setup> 语法糖里面的代码会被编译成组件 setup() 函数的内容,不需要通过 return 暴露 声明的变量、函数以及 import 引入的内容,即可在 <template/> 使用,并且不需要写 export default{}

<script setup> 语法糖里面的代码会被编译成组件 setup() 函数的内容。这意味着与普通的 <script> 只在组件被首次引入的时候执行一次不同,<script setup> 中的代码会在每次组件实例被创建的时候执行。

<script>
console.log('script');//多次实例组件,只触发一次
export default {
    setup() {
        console.log('setupFn');//每次实例化组件都触发和script-setup标签一样
    }
}
</script>

script-setup 标签最终都会编译成 setup() 函数的内容,每次实例化组件,就是实例化一次 setup 函数。script 标签里面的 setup 函数也是一样每次实例化组件,就是实例化一次 setup 函数,但是 script 标签 setup 是需要写在 export default{} 内的,外的只是首次引入的时候执行一次。