第九章、Vue3中<script setup>语法糖

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

摘要:<script setup>语法糖: https://cn.vuejs.org/api/sfc-script-setup.html

一、<script setup>语法糖用法

1.1 基本语法:

要使用这个语法,在script 中添加setup属性即可。

<script setup></script>

里面的代码最终会编译成setup()函数中的内容: 所以每次在组件实例被创建时,都会执行;

1.2 顶层绑定自动暴露给模板

当使用<script setup>时候,任何在其中声明的顶层绑定(包括变量,方法,import导入的东西)都可以在template中直接使用,不在需要return,节省代码。

<template>
  <div id="app">
    {{count}} <button @click="add"></button>
  </div>
</template>


<script setup>
import { ref } from "vue";
const count = ref(0)
const add = count.value ++

</script>
1.3 setup 在components中的使用
1.3.1 组件名自动推断

在<script setup>中,不书写组件名,vue会自动把文件名作为组件名,如果想自定义,可以添加普通的script中name配置。

//Foo.vue
<script setup></script>
 
<script>
export default {
  name: 'FooIndex'
}
</script>
1.3.2 动态组件: import导入的组件会被当成变量名,而非字符串,注意;
<template>
  <div id="setup">
    <component :is="condition ? Foo : Bar" />
  </div>
</template>


<script setup>
import { ref } from "vue";
import Foo from './Foo.vue'
import Bar from './Bar.vue'

const condition = ref(true)

setTimeout(() =>{
  condition.value = false;
},2000)

</script>
1.3.3 递归组件

一个单文件组件可以通过它的文件名被其自己所引用。例如:名为 FooBar.vue 的组件可以在其模板中用 <FooBar/> 引用它自己。

请注意这种方式相比于导入的组件优先级更低。如果有具名的导入和组件自身推导的名字冲突了,可以为导入的组件添加别名:

import { FooBar as FooBarChild } from './components'
1.3.4 命名空间组件

在单文件中导入过多组件时候,之前需要写很多import,命名空间组件可以简化代码。template中可通过对象点语法使用组件.

index.vue

<template>
  <div id="setup">
    <All.Foo />
    <All.Bar />
  </div>
</template>

<script setup>
import { ref } from "vue";
// import Foo from './components/Foo.vue'
// import Bar from './components/Bar.vue'
import * as All from './components'

</script

在components中index.ts,可导入当前所有的子组件

import Foo from './Foo.vue'
import Bar from './Bar.vue'

export {
   Foo,
   Bar
}
1.4 defineProps 与defineEmits 运行时声明和类型声明写法
1.4.1 运行时声明和类型声明

运行时声明即代码运行后会给出相应的提示,比如子组件在props显式声明title为String类型,编码时传递number类型,Vue会给出相应的提示:类型声明(ts类型检查)即代码过程中,在运行之前,集=结合IDE,ts,就会给出提示,比如标红,下划线等

运行时声明写法

<script setup>
const props = defineProps({
  foo: String
})

const emit = defineEmits(['change', 'delete'])
// setup 代码
</script>

类型声明写法

const props = defineProps<{
  foo: string
  bar?: number
}>()

const emit = defineEmits<{
  (e: 'change', id: number): void
  (e: 'update', value: string): void
}>()
1.5 defineExpose:暴露当前组件方法和数据,供父组件调用(结合ref)
//child.vue
<script setup>
import { ref } from 'vue'

const count = ref(0)
const add = () => count.value ++

defineExpose({
  count,add
})
</script>


//index.vue
<Child ref="childRef"/>
const childRef = ref(null)
onMounted(() =>{
  console.log(childRef.value.count)
})
1.6 useSlots和useAttrs: 主要用与获取当前组件的插槽和attrs信息
<script setup>
import { useSlots, useAttrs } from 'vue'

const slots = useSlots()
const attrs = useAttrs()
</script>
1.7 与普通script块一起用,下面这几种情况可以一起用,其他情况,反对混用
  • 声明无法在 <script setup> 中声明的选项,例如 inheritAttrs 或插件的自定义选项。

  • 声明模块的具名导出 (named exports)。

  • 运行只需要在模块作用域执行一次的副作用,或是创建单例对象。

<script>
// 普通 <script>, 在模块作用域下执行 (仅一次)
runSideEffectOnce()

// 声明额外的选项
export default {
  name: 'ChildIndex'
  inheritAttrs: false,
  customOptions: {}
}
</script>

<script setup>
// 在 setup() 作用域中执行 (对每个实例皆如此)
</script>
1.8 顶层await: 顶层不在需要写async, 最终会编译成async setup()
<script setup>
import { ref } from "vue";
const ret = await ( await fetch('https://api.uomg.com/api/rand.qinghua?format=json')).json()
if(ret.code === 1) console.log(ret.content)


// const randWords = ref('')
// const generateWords = async () =>{
//   const res = await ( await fetch('https://api.uomg.com/api/rand.qinghua?format=json')).json()
//   if(res.code === 1)  randWords.value = res.content
// }
</script>

注意: async setup必须和Suspense(实验阶段)结合使用,目前不推荐使用文章来源地址https://www.toymoban.com/news/detail-673758.html

1.9 限制src引入:禁止<script steup>与src导入的.js,ts一起使用。
<template src="./template.html"></template>
<script src="./script.js"></script>
<style src="./style.css"></template>
//禁止这样混用
<script setup></script>

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

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

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

相关文章

  • Vue语法糖<script setup>详解,用最快的方式让你看懂和<script>的区别

    Vue3出来已经3年了,但是前两天在百度上搜索有关setup语法糖的细节时,发现很多博客关于语法糖细节部分,还是讲的很粗糙,因此决定自己来写一篇入门的博客,方便大家快速上手。 它是Vue3中的一个语法糖,熟悉vue3脚手架的同学,应该一眼就能看出来,vite脚手架默认创建

    2024年03月15日
    浏览(29)
  • Vue3实战06-CompositionAPI+<script setup>好在哪?

    Vue 3 的Composition API + 这就把清单功能独立出来,可在任意需要的地方复用。 基于组件去搭建应用,可实现对业务逻辑的复用。如有其他页面也需要用到这功能,直接复用。 然后,就可基于新语法实现清单应用。 把之前的代码移植过来后,使用ref包裹的响应式数据。修改tit

    2024年02月09日
    浏览(28)
  • vue3组合式api <script setup> props 父子组件的写法

    父组件传入子组个的变量, 子组件是无法直接修改的, 只能通过 emit的方式, 让父组件修改, 之后子组件更新 父组件的写法没有变, 子组件的写法就有很大的变化了

    2024年02月10日
    浏览(34)
  • Vue3 项目中使用setup()函数报错,script setup cannot contain ES module exports

    当使用vue3+vite使用语法糖setup时,要注意写法. 第一种写法就是 script 标签里面配置 setup,另一种是:export default 类里配置 setup() 方法, 我们只需要使用一种方法即可,混用了就会报错了。 解决: 第一种 script setup import {ref} from \\\'vue\\\' import { Toast } from \\\'vant\\\'; import Index from \\\'../pag

    2023年04月08日
    浏览(40)
  • Vue 3 + Ts 钩子函数(hooks)的用法,以<script setup lang=“ts“/>语法糖形式 #reactive #ref

    在上述代码中,使用了reactive函数来创建一个响应式的state对象,其中包含一个count属性。还定义了一个increment方法,用于增加count的值。在组件挂载后,使用onMounted钩子函数输出了一个初始化信息。 最后,通过export将state和increment导出,以便在模板中使用。 在这个例子

    2024年01月24日
    浏览(26)
  • 【vue3】基础知识点-setup语法糖

    学习vue3,都会从基础知识点学起。了解setup函数,ref,recative,watch、comptued、pinia等如何使用 今天说vue3组合式api,setup函数 在学习过程中一开始接触到的是这样的,定义数据且都要通过return返回 最新接触到的是这样的 两种不同的写法,那区别是什么呢? 其实在script标签上直

    2024年02月13日
    浏览(31)
  • vue3 组件间通信的方式(setup语法糖写法)

    该方式用于父传子,父组件以数据绑定的形式声明要传递的数据,子组件通过defineProps()方法创建props对象,即可拿到父组件传来的数据。 2. emit方式 emit 方式也是Vue中最常见的组件通信方式,该方式用于 子传父。 3、defineExpose 利用defineExpose+ref 可以得到组件里的方法和变量

    2024年02月12日
    浏览(32)
  • 关于 vue3运行报错Internal server error: [@vue/compiler-sfc] <script setup> cannot contain ES 的处理方法

    大致的意思就是 script setup  不能使用ES模块导出 其实问题就出在,给官方给出的方法混用了 一种是: script  标签里面配置  setup 另一种是: export default  类里配置  setup()  方法 两者用一种就行了 第一种  第二种

    2024年02月07日
    浏览(36)
  • vue3-json-schema-form中StringField.vue报错 `<script setup>` cannot contain ES module exports vue/no-e

    vue3-json-schema-form课程中StringField.vue照着打报错 原代码如下: 修改后代码如下: type.ts文件代码片段如下: 主要问题就是说script标签中加上setup,代码块中不能再出现export default,将该部分代码 修改为:

    2024年02月11日
    浏览(25)
  • vue3-setup语法糖 - 父子组件之间的传值

    近期学习 vue3 的父子组件之间的传值,发现跟vue2的并没有太大的区别,然后发现网络上很少基于setup语法糖的教程,我这边总结一下,希望对大家有所帮助。 父组件向子组件传值的时候,子组件是通过props来接收的,然后以变量的形式将props传递到setup语法糖果中使用(defin

    2024年02月11日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包