Vue3 Composition API 之 setup 函数

简介: Vue 3 中引入的一种新的编写 Vue 组件的方式,可以将 2.x 中与组件逻辑相关的选项以 API 函数的形式重新设计。
Vue 3 中引入的一种新的编写 Vue 组件的方式,可以将 2.x 中与组件逻辑相关的选项以 API 函数的形式重新设计。

在说 Vue3 之前,我们先看看 Vue2 项目中是如何编写逻辑代码的,
新建一个组件

<template>
  <div></div>
</template>
<script>
export default {
  name: "demo",
  props: {},
  data() {
    return {};
  },
  created() {},
  watch: {},
  computed: {},
  methods: {}
};
</script>
<style></style>

每个属性都有自己的功能,比如 data 定义数据、methods 中定义方法、computed 中定义计算属性、watch 中监听属性改变,小项目中这种方式确实能带来很大的便利,但是当我们组件变得更大,更复杂时,逻辑会不断增长,那么同一个功能的逻辑就会被拆分的很分散。尤其是对于后面接手的同事,可读性会很低,很难理解。一个功能会跳到多个地方,比较容易出差错,而且后期维护会很复杂。

是不是可以将一个功能点涉及到的数据和逻辑组织到一起,Composition API 就这么诞生了,它很好的解决了上面的问题。接下来认识下 Composition API,由于对 TS 支持更友好,所以 demo 用 ts 做示例

<template>
  <div>
    <a-button type="primary" @click="getValue(22)">Primary Button</a-button>
    <a-input v-model:value="count"></a-input>
    <div>{{ count }}</div>
    <div>{{ x }}-{{ y }}</div>
    <a-button @click="add">点击</a-button>
    <div>{{ counter.count }}</div>
  </div>
</template>

<script setup lang="ts">
import { ref, onMounted } from "vue";
import { postLogin } from "@/api/user";
import { useMouse } from "@/hooks/main";
import { useCounterStore } from "@/store/modules/counter";

defineProps<{ msg: string }>();

// 获取鼠标位置信息
const { x, y } = useMouse();
const counter = useCounterStore();
function add() {
  counter.count++;
  counter.$patch({ count: counter.count });
  counter.increment();
}

// 获取数据
function getdata(title?: string) {
  postLogin({ username: "22", password: "33" })
    .then(res => {
      console.log(res);
    })
    .catch(err => {
      console.log("0000");
    });
}

// 获取值
const count = ref(0);
function getValue(value?: any): void {
  count.value = value;
}

</script>

<style scoped lang="less">
.read-the-docs {
  color: #888;
}
.vue {
  .vue-child {
    font-size: 40px;
    background: @main-color-theme1;
  }
}
</style>

代码中我们可以看到,少了一些选项,功能点逻辑更加集中,看不懂没关系,这里只是演示,后面会详细讲解,这篇文章主要讲解 Composition API 的 setup 函数

一 setup 函数

setup 其实就是组件的另外一个选项,只不过这个选项强大到我们可以使用它来替代之前所编写的大部分其他选项,比如:methods、computed、data、生命周期等选项。

参数

props:父组件传递过来的属性
context:是一个普通的 JavaScript 对象,它暴露三个组件的 property
props
因为 props 是响应式的,你不能使用 ES6 解构,因为它会消除 prop 的响应性。如果需要解构 prop,可以通过使用 setup 函数中的 toRefs 来安全地完成此操作。

Vue3.0 使用

<script>
export default {
  setup (props) {
      return {}
  }
}
</script>

Vue3.2 使用

<script setup>
export default {
  const props = defineProps({
    treeCode: String,
  });
}
</script>

script setup 是一种编译时语法糖,可在 SFC 内使用 Composition API 时极大地提升工作效率。

context
里面包含有三个属性 attrs、slots 和 emit

(1)attrs:里面包含了所有的非 props 属性。
(2)slots:父组件传递过来的插槽。
(3)emit:当我们组件内部需要发出事件时会用到 emit。

Vue3.0 使用

<script>
export default {
  setup (props.{attrs,slots,emit}) {
      return {}
  }
}
</script>

Vue3.2 使用


<script setup>
export default {
  // defineProps
  const props = defineProps({
    treeCode: String,
  });
  // defineEmits
  const emit = defineEmits(['on-confirm'])
  // useSlots
  const slots = useSlots()
}
</script>

在 script setup 使用 slots 和 attrs 的情况应该是很比较少见的,大部分人是(SFC)模式开发,在 template 通过 slot 标签就可以渲染插槽,可以在模板中通过 $slots 和 $attrs 来访问它们。主要在 JSX /TSX 使用比较多。

this

setup 不可以使用 this

setup() 自身并不含对组件实例的访问权,即在 setup() 中访问 this 会是 undefined。我们可以理解为:this未指向当前的组件实例,在setup被调用之前,data,methods,computed等都没有被解析,但是组件实例确实在执行setup函数之前就已经被创建好了。

相关文章
|
25天前
|
JavaScript 前端开发 API
Vue.js 3中的Composition API:提升你的组件开发体验
Vue.js 3中的Composition API:提升你的组件开发体验
|
1月前
|
JavaScript 前端开发 API
Vue 3新特性详解:Composition API的威力
【10月更文挑战第25天】Vue 3 引入的 Composition API 是一组用于组织和复用组件逻辑的新 API。相比 Options API,它提供了更灵活的结构,便于逻辑复用和代码组织,特别适合复杂组件。本文将探讨 Composition API 的优势,并通过示例代码展示其基本用法,帮助开发者更好地理解和应用这一强大工具。
36 2
|
1月前
Vue3 项目的 setup 函数
【10月更文挑战第23天】setup` 函数是 Vue3 中非常重要的一个概念,掌握它的使用方法对于开发高效、灵活的 Vue3 组件至关重要。通过不断的实践和探索,你将能够更好地利用 `setup` 函数来构建优秀的 Vue3 项目。
|
2月前
|
JavaScript API
vue3知识点:ref函数
vue3知识点:ref函数
37 2
|
2月前
|
JavaScript API
vue3知识点:自定义hook函数
vue3知识点:自定义hook函数
28 2
|
2月前
|
API
vue3知识点:reactive函数
vue3知识点:reactive函数
33 1
|
2月前
|
API
《vue3第四章》Composition API 的优势,包含Options API 存在的问题、Composition API 的优势
《vue3第四章》Composition API 的优势,包含Options API 存在的问题、Composition API 的优势
30 0
|
2月前
|
JavaScript 前端开发 API
《vue3第六章》其他,包含:全局API的转移、其他改变
《vue3第六章》其他,包含:全局API的转移、其他改变
23 0
|
API
使用API函数查找窗体并激活
 生成程序时,有时需要限制用系统中只有一个实例在运行,这就需要我们在检测到系统中已有程序的实例在运行时,将这个已经在运行的实例,激活并显示在用户面前这里主要用到了FindWindow ,和 SetForegroundWindow这两个函数     /// &lt;summary&gt;/// The FindWindow API/// &lt;/summary&gt;/// &lt;
953 0
|
7天前
|
人工智能 自然语言处理 API
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动
谷歌推出的Multimodal Live API是一个支持多模态交互、低延迟实时互动的AI接口,能够处理文本、音频和视频输入,提供自然流畅的对话体验,适用于多种应用场景。
45 3
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动