作者:Matt Maribojoc
译者:前端小智
起源:stackabuse

有幻想,有干货,微信搜寻 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。

本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试残缺考点、材料以及我的系列文章。

如果你最近应用Vite和Vue3工作,你会留神到,在 Vue 组件中会应用这种<srcript>语法。

<script setup>import HelloWorld from './components/HelloWorld.vue'// 这个模板应用的是Vue3实验性`<script setup>` SFCs

你可能会有纳闷三连,“这是什么鬼? 这是 Options API ? 还是 Composition API? setup办法又在哪里?”

<script setup>类型是Vue的Git RFC中的倡议。 须要明确的是,这并不是要齐全代替任何以后写法。 其目标是为开发人员提供更简洁的语法,以编写其单个文件组件。

在本文中,咱们认真钻研它的工作原理以及一些有用的办法。

script setup

<script setup>中,咱们不用申明export defaultsetup办法,这种写法会主动将所有顶级变量申明公开给模板(template)应用。

在 Composition API 中,咱们习惯创立setup办法,而后返回咱们想要公开货色,如下所示:

<script>import { ref, computed } from 'vue'export default {   setup () {      const a = ref(3)      const b = computed(() => a.value + 2)            const changeA = () => { a.value = 4 }      return { a, b, changeA } // have to return everything!    }}</script>

如果应用 <script setup> 语法,咱们能够用上面的代码来实现与下面的一样性能:

<script setup>import { ref, computed } from 'vue'// all of these are automatically bound to the templateconst a = ref(3)const b = computed(() => a.value + 2)      const changeA = () => { a.value = 4 } </script>

不仅是数据,计算的属性和办法,甚至是指令和组件也能够在咱们的template中主动取得。

<template>     <component-b /></template><script setup>import ComponentB from './components/ComponentB.vue' // really that's it!</script>

这个很魔法。

那么,这有什么意义呢?

长话短说,此语法使单个文件组件更简略。

用RFC的里的原话来说,“该提案的次要指标是通过将<script setup>的上下文间接裸露给模板来缩小SFC外部 Composition API 应用的简短性。”

这就是咱们刚刚看到的,无需关怀在setup办法返回的值(因为有时应该会遗记在 setup 返回咱们须要的值,导致模板获取不到对应的值),咱们能够简化代码。

<script setup>的更高级用法

当初咱们晓得<script setup>到底是什么,以及为什么它有用,接着,咱们看一下它的一些更高级的性能。

拜访 props, emit 事件 等

首先,你可能想晓得如何执行规范的Vue操作,例如:

  • 拜访 props
  • 怎么收回自定义事件
  • 拜访上下文对象

在Composition API中,这些放在了setup 办法中的参数

setup (props, context) {    // context has attrs, slots, and emit}

然而,在script setup语法中,咱们能够通过从Vue导入3次对应的 API 来拜访这些雷同的选项。

  • defineProps – 顾名思义,它容许咱们为组件定义 props
  • defineEmits – 定义组件能够收回的事件
  • useContext – 能够拜访组件的槽和属性
<template> <button @click="$emit('change')"> Click Me </button></template><script setup>  import { defineProps, defineEmit, useContext } from 'vue'  const props = defineProps({    foo: String,  })  const emit = defineEmit(['change', 'delete'])  const { slots, attrs } = useContext()  </script>

通过这3种导入,咱们能够取得传统设置办法所习用的性能。

创立异步 setup 办法

script setup语法的另一个很酷的性能是创立异步setup非常容易。

这对于在创立组件时加载api,甚至将代码绑定到<suspense>性能很有用。

咱们所要做的就是让咱们的 setup函数是异步的,在咱们的script setup中应用一个顶级的await

例如,如果咱们应用的是Fetch API,咱们能够像这样应用await

<script setup>      const post = await fetch(`/api/pics`).then((a) => a.json())</script>

这样setup()函数将是异步的。

应用<script setup>和一个一般的<script>

<script setup>为其顶级绑定创立本人的脚本作用域。 然而在某些状况下,必须在模块范畴内执行代码。

该RFC中的2个具体示例是:

  • Declaring named exports
  • 创立仅执行一次的全局副作用

这能够通过在 script setup 旁边增加一个一般的<script>块来实现,如下所示。

<script>  performGlobalSideEffect()  // this can be imported as `import { named } from './*.vue'`  export const named = 1</script><script setup>  // code here</script>

总结

目前,这个 script setut是可选的,所以如果你想尝试它,只需在的script标签中增加setup

要理解无关 script setup的更多信息,请点击此处,链接到残缺的RFC及其动机,确切的语法和更多的技术实现。


代码部署后可能存在的BUG没法实时晓得,预先为了解决这些BUG,花了大量的工夫进行log 调试,这边顺便给大家举荐一个好用的BUG监控工具 Fundebug。

原文:https://learvue.co/2021/05/ex...

交换

有幻想,有干货,微信搜寻 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。

本文 GitHub https://github.com/qq44924588... 已收录,有一线大厂面试残缺考点、材料以及我的系列文章。