【揭秘Vue3 Composition API】入门技巧与实战案例解析

作者:用户RXXS 更新时间:2025-05-30 13:16:06 阅读时间: 2分钟

1. 引言

Vue3的Composition API是Vue.js框架的一个重要特性,它提供了一种新的组织组件逻辑的方式,旨在解决Options API在复杂组件中逻辑分散的问题。Composition API通过setup函数将相关逻辑集中管理,提高了代码的可读性和可维护性。本文将带你深入了解Composition API的入门技巧,并通过实战案例解析其应用。

2. Composition API核心概念

2.1 setup函数

setup函数是Composition API的入口点,它在组件实例创建之前被调用。setup函数接收两个参数:propscontextprops是传递给组件的属性,context包含了一些与组件相关的方法和属性,如emitslotsattrs等。

setup(props, { emit, slots, attrs }) {
  // ...
}

2.2 响应式数据

Composition API提供了refreactive函数来创建响应式数据。

  • ref:用于创建单个值的响应式对象。
  • reactive:用于创建对象类型的响应式对象。
import { ref, reactive } from 'vue';

setup() {
  const count = ref(0);
  const person = reactive({ name: 'John', age: 30 });
  // ...
}

2.3 计算属性和侦听器

  • computed:用于创建计算属性。
  • watch:用于创建侦听器。
import { computed, watch } from 'vue';

setup() {
  const count = ref(0);
  const doubledCount = computed(() => count.value * 2);

  watch(count, (newVal, oldVal) => {
    // ...
  });

  // ...
}

2.4 生命周期钩子

Composition API提供了生命周期钩子函数,如onBeforeMountonMountedonBeforeUpdateonUpdatedonBeforeUnmountonUnmounted等。

import { onBeforeMount, onMounted } from 'vue';

setup() {
  onBeforeMount(() => {
    // ...
  });

  onMounted(() => {
    // ...
  });

  // ...
}

3. 实战案例:构建TodoList应用

下面我们通过一个TodoList应用的实战案例,展示如何使用Composition API来构建组件。

3.1 创建TodoItem.vue组件

<template>
  <div>
    <input type="checkbox" v-model="todo.completed" />
    <span>{{ todo.text }}</span>
    <button @click="emit('remove', todo.id)">Remove</button>
  </div>
</template>

<script>
import { ref } from 'vue';

export default {
  props: ['todo'],
  emits: ['remove'],
  setup(props, { emit }) {
    const todo = ref(props.todo);

    function removeTodo() {
      emit('remove', todo.value.id);
    }

    return { todo, removeTodo };
  }
};
</script>

3.2 创建useTodos可复用逻辑

import { ref } from 'vue';

export function useTodos() {
  const todos = ref([]);

  function addTodo(text) {
    todos.value.push({ text, completed: false });
  }

  function removeTodo(id) {
    todos.value = todos.value.filter(todo => todo.id !== id);
  }

  return { todos, addTodo, removeTodo };
}

3.3 在组件中使用useTodos

<template>
  <div>
    <input v-model="newTodoText" @keyup.enter="addTodo" />
    <ul>
      <todo-item
        v-for="todo in todos"
        :key="todo.id"
        :todo="todo"
        @remove="removeTodo"
      />
    </ul>
  </div>
</template>

<script>
import { useTodos } from './useTodos';
import TodoItem from './TodoItem.vue';

export default {
  components: { TodoItem },
  setup() {
    const { todos, addTodo, removeTodo } = useTodos();
    const newTodoText = ref('');

    return { todos, addTodo, removeTodo, newTodoText };
  }
};
</script>

4. 总结

Composition API是Vue3的一个强大特性,它通过setup函数将组件逻辑集中管理,提高了代码的可读性和可维护性。通过本文的入门技巧和实战案例解析,相信你已经对Composition API有了更深入的了解。在实际项目中,你可以尝试使用Composition API来组织组件逻辑,从而提高开发效率和代码质量。

大家都在看
发布时间:2024-12-10 20:54
成都地铁运营时间表如下:地铁10号线:双流机场2航站楼06:05—23:05,太平回园06:00—23:00地铁1号线:答五根松06:15—23:00,华阳06:56—23:37地铁2号线:犀浦06:20—22:30,龙泉驿06:10—22。
发布时间:2024-10-29 23:31
有的人每天都要走很多的路,或者每天要站很长的时间,这样的话人的脚底容易受累,有的人还会在脚底出现血泡的现象,通常是因为脚长时间磨擦引起的水泡,水泡会使人感觉。
发布时间:2024-12-13 17:08
预计二期工程将于2024年底建成通车。一期工程于2016年12月31日开工建设。一期工程东北起自成华区十里店站,途经锦江区、武侯区、成都高新技术产业开发区,终点止于双流区莲花站,工程全长29.1千米,为全地下线,共设25座车站。预计一期工程。
发布时间:2024-12-11 15:46
地铁1号线→地铁2号线49分钟|20.2公里|步行340米。
发布时间:2024-10-30 18:28
身体内部的脂肪占据身体百分之70%左右,一般情况下身体出现体脂低对身体也存在一定的伤害,体脂过低会容易导致身体出现不孕的情况,由于体脂过低会影响到生殖器官的。
发布时间:2024-12-16 18:10
杭州的旅游景点越来越多,主要有:1、西湖,大约2至3天。2、西溪湿地,一天。3、千岛湖,三天(含来回往返)。以上是最主要景区和最短时间。。
发布时间:2024-10-30 00:11
调中二黄丸作为一种中药方剂已经被许多的人所接受,那么如何根据自己的身体情况来服用调中二黄丸就成为了一门学问,今天就来教大家如何食用调中二黄丸。 【处方】。
发布时间:2024-12-13 20:08
1、有轻轨,但没有地铁2、鄂州是武汉的卫星城3、鄂州坐轻轨到武汉票价是19元左右4、鄂州到武汉坐轻轨只要30分钟。
发布时间:2024-12-12 05:08
搜索腾讯乘车码小程序,点击刷码乘车,选择地铁,选择开通并同意协议,乘地铁时使用二维码支付。。
发布时间:2024-12-10 10:13