组合 API 与普通 JavaScript
Composition API vs. Plain JavaScript
我正在尝试找出对 'new' Vue 组合 API 的需求。
假设我们有以下组件,来自他们的 basic example:
<template>
<button @click="increment">
Count is: {{ state.count }}, double is: {{ state.double }}
</button>
</template>
<script>
import { reactive, computed } from '@vue/composition-api'
export default {
setup () {
const state = reactive({
count: 0,
double: computed(() => state.count * 2),
})
function increment () {
state.count++
}
return {
state,
increment,
}
},
}
</script>
我们也可以使用简单的 JavaScript 编写此 'composition style',并通过 data
选项使其可用:
<template>
<button @click="increment">
Count is: {{ state.count }}, double is: {{ state.double }}
</button>
</template>
<script>
export default {
data () {
const state = {
count: 0,
get double () {
return this.count * 2
},
}
function increment () {
state.count++
}
return {
state,
increment,
}
},
}
</script>
这两个选项在功能上有什么区别吗? Composition API的优点是什么?
引自@linusborg 在 Vue Discord server:
组合 API 的目标,如其名称所示,是使组合更容易和更好 - 以前是使用 mixins 完成的。它旨在通过将逻辑与 this 和 Options 对象分离来实现这一点,并允许我们在简单的 Javascript 函数中提取功能,然后我们可以在设置中组合这些函数。
与 Vue 2 mixins 方法相比,这种组合有很多好处,即易于在 TS 中输入,易于查看内容来自何处以及代码的哪一部分依赖于什么等等。所以主要重点是想出更好的组合模式并摆脱 mixins 的问题。
现在,您在代码示例中展示的内容可以很好地支持这种组合,但仅限于一定程度:
function reusableState () {
const state = {
count: 0,
get double () {
return this.count * 2
},
}
function increment () {
state.count++
}
return {
state,
increment,
}
}
export default {
data () {
return reusableState()
},
}
但这并没有考虑到其他一些特性:
- 观看
- 已计算(您使用的是 getter,但这与未缓存不同)
- 生命周期挂钩(安装、更新)
因此,如果您实际上有一段逻辑想要制作 reusable/composable,但它依赖于这些功能之一,您无法真正将其提取到这样的函数中。
这基本上就是组合 API 功能发挥作用的地方 - computed()、ref()、onMounted() 等。
您可以在此处阅读对组合 API 的设计和优势的更深入探索:https://vue-composition-api-rfc.netlify.com/
我正在尝试找出对 'new' Vue 组合 API 的需求。
假设我们有以下组件,来自他们的 basic example:
<template>
<button @click="increment">
Count is: {{ state.count }}, double is: {{ state.double }}
</button>
</template>
<script>
import { reactive, computed } from '@vue/composition-api'
export default {
setup () {
const state = reactive({
count: 0,
double: computed(() => state.count * 2),
})
function increment () {
state.count++
}
return {
state,
increment,
}
},
}
</script>
我们也可以使用简单的 JavaScript 编写此 'composition style',并通过 data
选项使其可用:
<template>
<button @click="increment">
Count is: {{ state.count }}, double is: {{ state.double }}
</button>
</template>
<script>
export default {
data () {
const state = {
count: 0,
get double () {
return this.count * 2
},
}
function increment () {
state.count++
}
return {
state,
increment,
}
},
}
</script>
这两个选项在功能上有什么区别吗? Composition API的优点是什么?
引自@linusborg 在 Vue Discord server:
组合 API 的目标,如其名称所示,是使组合更容易和更好 - 以前是使用 mixins 完成的。它旨在通过将逻辑与 this 和 Options 对象分离来实现这一点,并允许我们在简单的 Javascript 函数中提取功能,然后我们可以在设置中组合这些函数。
与 Vue 2 mixins 方法相比,这种组合有很多好处,即易于在 TS 中输入,易于查看内容来自何处以及代码的哪一部分依赖于什么等等。所以主要重点是想出更好的组合模式并摆脱 mixins 的问题。
现在,您在代码示例中展示的内容可以很好地支持这种组合,但仅限于一定程度:
function reusableState () {
const state = {
count: 0,
get double () {
return this.count * 2
},
}
function increment () {
state.count++
}
return {
state,
increment,
}
}
export default {
data () {
return reusableState()
},
}
但这并没有考虑到其他一些特性:
- 观看
- 已计算(您使用的是 getter,但这与未缓存不同)
- 生命周期挂钩(安装、更新)
因此,如果您实际上有一段逻辑想要制作 reusable/composable,但它依赖于这些功能之一,您无法真正将其提取到这样的函数中。
这基本上就是组合 API 功能发挥作用的地方 - computed()、ref()、onMounted() 等。
您可以在此处阅读对组合 API 的设计和优势的更深入探索:https://vue-composition-api-rfc.netlify.com/