setUp 函数

setUp 函数的作用就是为 Composition API 在组件中使用提供入口。意思就是你要使用 Composition API,在组件中必须提供 setUp 函数。

setUp 函数使用方式如下

  1. <template>
  2. <div>
  3. <button @click="increment">
  4. {{target.name}} tapped {{times}} times
  5. </button>
  6. </div>
  7. </template>
  8. <script>
  9. import { createComponent, ref, reactive } from '@vue/composition-api'
  10. export default createComponent({
  11. // 组件被创建时setUp函数被调用
  12. setup() {
  13. let times = ref(0)
  14. let target = reactive({
  15. name: 'Button'
  16. })
  17. const increment = () => {
  18. times.value++
  19. }
  20. //把属性暴露给template
  21. return {
  22. times,
  23. target,
  24. increment
  25. }
  26. }
  27. })
  28. </script>

setup(props, context) 的参数

props 对象

  • 想要在 setUp 内访问到组件的 props,必须在它参数的第 1 个位置提供 props 参数。如下:
  1. <script>
  2. import { createComponent } from '@vue/composition-api'
  3. export default createComponent({
  4. props: {
  5. greet: {
  6. type: String,
  7. default: 'Hello Vue3!'
  8. }
  9. },
  10. setup(props) {
  11. console.log(props.greet) //输出 'Hello Vue3!'
  12. }
  13. })
  14. </script>

context 对象

  • 在 composition API 里不再提供 this,而是换成了 context 对象,里面包含了在 2.x APIs 的 this 所拥有的属性,它被作为 setUp 的第二个参数。
  1. <script>
  2. import { createComponent } from '@vue/composition-api'
  3. export default createComponent({
  4. setup(props, context) {
  5. context.attrs
  6. context.slots
  7. context.parent
  8. context.root
  9. context.emit
  10. }
  11. })
  12. </script>
  • 实际案例如下:
  1. <script>
  2. import { createComponent } from '@vue/composition-api'
  3. export default createComponent({
  4. setup(props, context) {
  5. context.root.$on('test', function(msg) {
  6. console.log(msg) // 'hi'
  7. })
  8. context.root.$emit('test', 'hi')
  9. }
  10. })
  11. </script>