在阅读此文档时候:
方式1:不使用<script setup>
// js
import { reactive } from 'vue'
export default {
// `setup` 是一个专门用于组合式 API 的特殊钩子函数
setup() {
const state = reactive({ count: 0 })
// 暴露 state 到模板
return {
state
}
}
}
// template
<div>{{ state.count }}</div>
方式2:使用<script setup>
<script setup>
import { reactive } from 'vue'
const state = reactive({ count: 0 })
function increment() {
state.count++
}
</script>
<template>
<button @click="increment">
{{ state.count }}
</button>
</template>
请问下:
1.这2种方式都是组合式API吗?我只见过第二种写法,
2.方式1写在一个.vue文件中是这样的吗?
<script>
import { reactive } from 'vue'
export default {
setup() {
const state = reactive({ count: 0 })
function increment() {
state.count++
}
// 不要忘记同时暴露 increment 函数
return {
state,
increment
}
}
}
</script>
<template>
<button @click="increment">
{{ state.count }}
</button>
</template>
省流:
setup
并不代表组合式 API
,只是组合式 API
的限制是必须要在setup
中使用;详解
这两种都是
组合式 API
的应用场景,也就是composition api
的中文解释,在我们使用Vue2
的时候,用的都是选项式 API
,英文对应的是options api
;方式1
就是在选项式 API
中新增了一个选项配置,叫做setup
的一个可选配置,在这个里面写的所有的代码全都是普通的 JS 对象
,这个时候我们就需要使用组合式 API
来使这个普通的 JS 对象变成响应式对象
;就拿你文中的示例来说:
import { reactive } from 'vue'
这个叫做组合式 API
;const state = reactive({ count: 0 })
这个叫做组合式 API 的应用
最后还需要通过
return
将这些JS对象
返回出去,需要注意的是,这个返回的不管是不是响应式的对象,返回只是为了可以在其他模块中使用,例如你需要在模板中使用,就是下面的代码片段:这个
state
在定义的时候,使用了组合式 API
的reactive
函数来使其成为一个响应式对象,如果说不使用的话,其一是这个对象无法保持响应式,其二是你只使用了setup
并没有使用组合式 API
。再说一下方式2:
方式2
就是方式1
的变形,也就是我们常说的语法糖
,上面讲方式1
讲了那么多,其实在方式2
中也是相同的,不是同的是什么呢?return
就可以在其他的地方使用定义好的变量。选项式 API
。这就是最大的,也是最明显的两个区别,例如我们是从
Vue2
过渡到Vue3
的用户,对Vue2
的选项式 API
滚瓜乱熟了,但是还不太了解Vue3
的组合式 API
,现在有下面这样的一段代码:这是
Vue2
中的组件应用的写法,那么在Vue3
中应该怎么使用呢?方式一:
方式2:
说了这么多,只是讲了
方式1
和方式2
之间的区别,好像并没有讲什么是组合式 API
;组合式 API
组合式 API
是Vue
提供的一种可以逻辑复用
,并且有状态
的函数
,例如有一个计数器的功能:组合式 API
组合式API
(这里直接使用语法糖的写法了)先不说简洁程度,现在思考一个问题,就是如果这个计数器需要复用,如果不使用
组合式 API
应该怎么做?第一个想到的可能是
minxis
,但是如果我自己的页面上也有一个同名的count
和increment
怎么办?而且你引用了minxis
别人怎么知道里面有什么呢?这里就不演示代码了,Vue3
已经表示minxis
该被弃用了。而使用
组合式API
可以怎么做呢?useXxx
开头的函数,将上面写的js
代码复制进去,最后将这个函数导出,如下:useXxx
函数为什么要使用
useXxx
的这个use
开头来命名这个函数呢?这个只是业内大家默认的一个规范,大家看到是
use
开头的就心里明白这个函数的返回结果是响应式的,你也可以不使用use
开头,当然这种是不建议的。这个问题到这里了,希望对你有所帮助。