当前位置: 首页 > article >正文

Vue3的Composition API

Vue3的Composition API(Vue3与Vue2的区别)

Vue 3 引入了 Composition API(组合式API),这是一种新的编写组件逻辑的方式,旨在解决 Options API 在某些场景下的局限性。Composition API 提供了更灵活和强大的代码组织方式,特别适合处理复杂组件的逻辑复用和代码组织。

Composition API 的核心概念

1. setup 函数:

- setup 是 Composition API 的入口函数,它在组件实例创建之前执行。

- setup 接收两个参数:
	props:组件的 props。
	context:包含 attrs、slots、emit 等属性的上下文对象。

- setup 函数返回一个对象,该对象的属性和方法可以在模板中直接使用。
export default {
  props: {
    title: String,
  },
  setup(props, context) {
    const count = ref(0);

    function increment() {
      count.value++;
    }

    return {
      count,
      increment,
    };
  },
};

2. ref 和 reactive:

- ref:用于创建一个响应式的数据引用,通常用于基本类型(如字符串、数字等)。

- reactive:用于创建一个响应式的对象,适用于复杂数据结构。
import { ref, reactive } from 'vue';

setup() {
  const count = ref(0); // 基本类型
  const state = reactive({ name: 'Vue', age: 3 }); // 对象

  return { count, state };
}

3. computed:

用于创建计算属性,类似于 Options API 中的 computed。

import { ref, computed } from 'vue';

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

  return { count, doubleCount };
}

4. watch 和 watchEffect:

- watch:用于监听响应式数据的变化,类似于 Options API 中的 watch。

- watchEffect:自动追踪其依赖,并在依赖变化时重新执行。
import { ref, watch, watchEffect } from 'vue';

setup() {
  const count = ref(0);

  watch(count, (newValue, oldValue) => {
    console.log(`count changed from ${oldValue} to ${newValue}`);
  });

  watchEffect(() => {
    console.log(`count is now ${count.value}`);
  });

  return { count };
}

5. 生命周期钩子:

Composition API 提供了与 Options API 对应的生命周期钩子函数,如 onMounted、onUpdated、onUnmounted 等。

import { onMounted, onUnmounted } from 'vue';

setup() {
  onMounted(() => {
    console.log('Component mounted');
  });

  onUnmounted(() => {
    console.log('Component unmounted');
  });
}

6. provide 和 inject:

用于跨组件层级传递数据,类似于 Vue 2 中的 provide/inject

import { provide, inject } from 'vue';

// 父组件
setup() {
  provide('theme', 'dark');
}

// 子组件
setup() {
  const theme = inject('theme', 'light'); // 默认值为 'light'
  return { theme };
}

Composition API 的优势

  1. 更好的逻辑复用:

    通过自定义 Hook(类似于 React 的 Hook),可以轻松复用逻辑代码。

    例如,可以将数据获取、事件监听等逻辑提取到独立的函数中。

    // useFetch.js
    import { ref } from 'vue';
    
    export function useFetch(url) {
      const data = ref(null);
      const error = ref(null);
    
      fetch(url)
        .then((res) => res.json())
        .then((json) => (data.value = json))
        .catch((err) => (error.value = err));
    
      return { data, error };
    }
    
    // 组件中使用
    setup() {
      const { data, error } = useFetch('https://api.example.com/data');
      return { data, error };
    }
    
  2. 更灵活的代码组织:

    可以将相关逻辑组织在一起,而不是分散在 data、methods、computed 等选项中。

  3. 更好的 TypeScript 支持:

    Composition API 的设计更符合 TypeScript 的类型推断机制,提供了更好的类型支持。

与 Options API 的关系

Composition API 并不是为了取代 Options API,而是为了提供一种更灵活的选择。

对于简单的组件,Options API 仍然是一个很好的选择。

对于复杂的组件或需要逻辑复用的场景,Composition API 更具优势。

示例:一个简单的计数器组件:

<template>
  <div>
    <p>Count: {{ count }}</p>
    <button @click="increment">Increment</button>
  </div>
</template>

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

export default {
  setup() {
    const count = ref(0);

    function increment() {
      count.value++;
    }

    return {
      count,
      increment,
    };
  },
};
</script>

总结:
Composition API 是 Vue 3 的核心特性之一,它提供了更灵活和强大的方式来组织组件逻辑。通过 setup 函数、ref、reactive、computed、watch 等工具,开发者可以更高效地编写和维护复杂的 Vue 组件。


http://www.kler.cn/a/551299.html

相关文章:

  • 前端与后端的对接事宜、注意事项
  • windows11升级到24H2后Oracle VM VirtualBox无法启动虚拟机
  • RabbitMQ 3.12.2:单节点与集群部署实战指南
  • 实战设计模式之组合模式
  • 基于python深度学习遥感影像地物分类与目标识别、分割实践技术应用
  • HBase Shell
  • 【BUG】Ubuntu|有nvcc,没有nvidia-smi指令,找不到nvidia-driver安装包
  • 机器学习之熵的计算方法及香农信息熵的含义
  • 使用右侧值现象来处理一个word导入登记表的需求
  • 像素绽放PixelBloom(AiPPT.com) 联合创始人蒲世林:创新者的窘境就是新物种的机会
  • 代码随想录day12
  • 【第1章:深度学习概览——1.6 深度学习框架简介与选择建议】
  • DeepSeek-R1本地部署详细指南!(Ollama+Chatbox AI+Open WebUI)
  • 开源赋能,智造未来:Odoo+工业物联网,解锁智能工厂新范式——以真实案例解读制造业数字化转型的降本增效密码
  • DeepSeek教unity------MessagePack-04
  • 零基础学QT、C++(一)安装QT
  • 深入解析 Vue 3 编译宏:揭开 `<script setup>` 的魔法面纱
  • 力扣-二叉树-513 找二叉树左下角的值
  • python学习笔记,python处理 Excel、Word、PPT 以及邮件自动化办公
  • Qt creater 出现“启动程序失败,路径或者权限错误”解决方法