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

Vue3 setup代替了vue2的哪些功能

文章目录

  • 1. 替代 data():定义响应式数据
  • 2. 替代 methods:定义方法
  • 3. 替代 computed:计算属性
  • 4. 替代生命周期钩子(如 created、mounted 等)
  • 5. 替代 props 和 $emit:父子组件通信
  • 6. 替代 watch:数据监听
  • 核心差异总结

Vue3 的 setup 函数(或 <script setup> 语法糖)是 Composition API 的核心入口,它替代了 Vue2 中 Options API的多个核心功能,实现了更灵活的代码组织方式。具体替代关系如下:

1. 替代 data():定义响应式数据

Vue2:通过 data() 函数返回响应式数据对象。

export default {data() {return {count: 0,user: { name: 'Alice' }};}
};

Vue3 setup:通过 ref/reactive 直接定义响应式数据,无需包裹在 data() 中。

import { ref, reactive } from 'vue';export default {setup() {const count = ref(0); // 基本类型响应式const user = reactive({ name: 'Alice' }); // 对象类型响应式return { count, user }; // 暴露给模板}
};

2. 替代 methods:定义方法

Vue2:在 methods 对象中定义方法,通过 this 访问数据。

export default {data() { return { count: 0 }; },methods: {increment() {this.count++; // 依赖 this 上下文}}
};

Vue3 setup:直接在 setup 中定义函数,通过闭包访问响应式数据(无需 this)。

import { ref } from 'vue';export default {setup() {const count = ref(0);const increment = () => {count.value++; // 直接访问变量,无需 this};return { count, increment };}
};

3. 替代 computed:计算属性

Vue2:在 computed 对象中定义计算属性。

export default {data() { return { count: 0 }; },computed: {doubleCount() {return this.count * 2;}}
};

Vue3 setup:通过 computed 函数创建计算属性。

import { ref, computed } from 'vue';export default {setup() {const count = ref(0);const doubleCount = computed(() => count.value * 2); // 函数式定义return { count, doubleCount };}
};

4. 替代生命周期钩子(如 created、mounted 等)

Vue2:通过选项定义生命周期钩子。

export default {created() {console.log('组件创建完成');},mounted() {console.log('组件挂载完成');}
};

Vue3 setup:通过 onXxx 系列函数(如 onMounted)注册生命周期,需手动导入。

import { onCreated, onMounted } from 'vue';export default {setup() {onCreated(() => {console.log('组件创建完成');});onMounted(() => {console.log('组件挂载完成');});}
};

注:setup 本身在 beforeCreate 和 created 之间执行,因此 onCreated 可直接在 setup 中写逻辑替代。

5. 替代 props 和 $emit:父子组件通信

Vue2:通过 props 选项接收父组件数据,通过 this.$emit 触发事件。

export default {props: {title: { type: String, required: true }},methods: {handleClick() {this.$emit('change', 'new value'); // 触发事件}}
};

Vue3 setup:通过 setup 的参数接收 props 和 emit。

export default {props: {title: { type: String, required: true }},setup(props, { emit }) { // 第一个参数是 props,第二个参数含 emitconst handleClick = () => {emit('change', 'new value'); // 直接调用 emit,无需 this};return { handleClick };}
};

6. 替代 watch:数据监听

Vue2:通过 watch 选项监听数据变化。

export default {data() { return { count: 0 }; },watch: {count(newVal, oldVal) {console.log(`count 从 ${oldVal} 变为 ${newVal}`);}}
};

Vue3 setup:通过 watch 或 watchEffect 函数监听。

import { ref, watch } from 'vue';export default {setup() {const count = ref(0);watch(count, (newVal, oldVal) => { // 显式指定监听对象console.log(`count 从 ${oldVal} 变为 ${newVal}`);});return { count };}
};

核心差异总结

Vue2 的 Options API 强制将代码按 “数据(data)、方法(methods)、生命周期(hooks)” 等分类,而 setup 允许按 “业务逻辑” 组织代码(如将相关的数据、方法、监听逻辑放在一起),更适合复杂组件。

简单说:setup 以函数式编程的方式,统一替代了 Vue2 中 data、methods、computed、watch、生命周期钩子等核心功能,同时提供了更灵活的代码组织能力。

http://www.dtcms.com/a/348603.html

相关文章:

  • 分布式事务的两种解决方案
  • MYSQL(DDL)
  • 前端 vs 后端请求:核心差异与实战对比
  • Qt——网络通信(UDP/TCP/HTTP)
  • 【Unity开发】Unity核心学习(二)
  • PAT 1081 Rational Sum
  • 【机器学习】8 Logistic regression
  • Power BI切片器自定义顺序
  • 智能油脂润滑系统:给设备一份 “私人定制” 的保养方案
  • Linux 学习笔记 - 集群管理篇
  • 【大模型LLM学习】Data Agent学习笔记
  • C++算法学习专题:二分查找
  • Kubernetes部署Prometheus+Grafana 监控系统NFS存储方案
  • Socket some functions
  • 让机器人“想象”未来?VLN导航迎来“理解力”新升级
  • 每日算法刷题Day64:8.24:leetcode 堆6道题,用时2h30min
  • 解密 Spring Boot 自动配置:原理、流程与核心组件协同
  • 人形机器人——电子皮肤技术路线:压电式电子皮肤及一种超越现有电子皮肤NeuroDerm的设计
  • 深度学习:CUDA、PyTorch下载安装
  • Leetcode 3659. Partition Array Into K-Distinct Groups
  • sqlite创建数据库,创建表,插入数据,查询数据的C++ demo
  • 商密保护迷思:经营秘密到底需不需要鉴定?
  • 对称二叉树
  • 机械学习综合练习项目
  • jar包项目自启动设置ubuntu
  • [论文阅读] 软件工程 | GPS算法:用“路径摘要”当向导,软件模型检测从此告别“瞎找bug”
  • 服务器硬件电路设计之 SPI 问答(四):3 线 SPI、Dual SPI 与 Qual SPI 的奥秘
  • 春秋云镜 Hospital
  • Vue 3多语言应用开发实战:vue-i18n深度解析与最佳实践
  • 线程包括哪些状态?线程状态之间是如何变化的?