作者: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 default
和setup
办法,这种写法会主动将所有顶级变量申明公开给模板(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 template
const 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… 已收录,有一线大厂面试残缺考点、材料以及我的系列文章。