您的位置:首页 > 财经 > 金融 > b2c电商平台的特点_深圳宝安区律师事务所_百度关键词搜索怎么弄_中国十大网站排名

b2c电商平台的特点_深圳宝安区律师事务所_百度关键词搜索怎么弄_中国十大网站排名

2025/4/17 21:15:01 来源:https://blog.csdn.net/moxunjinmu/article/details/146927652  浏览:    关键词:b2c电商平台的特点_深圳宝安区律师事务所_百度关键词搜索怎么弄_中国十大网站排名
b2c电商平台的特点_深圳宝安区律师事务所_百度关键词搜索怎么弄_中国十大网站排名

Vue3 Composition API 完全指南

📚 目录

  1. 组合式API核心概念
  2. 与选项式API对比
  3. setup深度解析
  4. 响应式API体系
  5. 生命周期管理
  6. 逻辑复用模式
  7. 最佳实践

🌟 组合式API核心概念

定义

组合式API(Composition API)是Vue3的核心特性,它通过逻辑功能聚合高复用性解决了复杂组件的代码组织问题。主要特征:

  • 功能聚合:将同一功能的响应式数据、计算属性、方法等集中管理
  • 逻辑复用:通过自定义Hook实现跨组件逻辑复用
  • 类型支持:完美支持TypeScript类型推断
  • 渐进式:可与选项式API混合使用

组合式api解决了什么问题

通过组合式api,将代码封装成为功能模块,并且在组件之间共享,实现逻辑代码的复用。

问题类型选项式API痛点组合式API解决方案
代码组织功能分散在多个配置项按功能聚合逻辑
大型组件维护超过1000行代码难以维护拆分为多个逻辑单元
逻辑复用Mixins导致命名冲突可组合函数
TypeScript支持类型推断困难天然支持类型推导

🔧 setup深度解析

基础用法

// 传统写法
export default {setup(props, context) {const count = ref(0)const double = computed(() => count.value * 2)function increment() {count.value++}return { count,double,increment}}
}// <script setup> 语法糖(推荐)
<script setup>
import { ref, computed } from 'vue'const count = ref(0)
const double = computed(() => count.value * 2)function increment() {count.value++
}
</script>

生命周期映射表

选项式API组合式API执行时机
beforeCreate-在setup之前执行
created-在setup之前执行
beforeMountonBeforeMount挂载开始前
mountedonMountedDOM挂载完成
beforeUpdateonBeforeUpdate数据变更导致DOM更新前
updatedonUpdatedDOM更新完成后
beforeUnmountonBeforeUnmount组件卸载前
unmountedonUnmounted组件卸载完成

Props深度处理

// 组件声明
export default {props: {userInfo: {type: Object,required: true,validator: (v) => v.age > 18}},setup(props) {// 安全解构方案const { userInfo } = toRefs(props)const userName = computed(() => userInfo.value.name)// 可选prop处理const theme = toRef(props, 'theme') // 等效props.theme || defaultreturn { userName }}
}

Context完整解析

setup(props, { attrs,     // 未声明的属性(相当于this.$attrs)slots,     // 插槽对象(相当于this.$slots)emit,      // 事件发射器(相当于this.$emit)expose     // 暴露公共API
}) {// 暴露指定方法expose({resetData: () => { /*...*/ }})// 事件发射示例const handleClick = () => {emit('custom-event', { data: 123 })}return { handleClick }
}

⚡ 响应式API体系

核心API对比

API适用场景深度响应示例
ref基本类型/对象引用浅层const num = ref(0)
reactive复杂对象深层const obj = reactive({})
shallowRef大型对象性能优化浅层const bigData = shallowRef({})
readonly不可变数据深层const copy = readonly(original)
computed派生数据自动const sum = computed(() => a+b)
watch复杂侦听可配置watch(source, callback, { deep: true })

响应式转换原理

// ref实现原理简化版
function myRef(value) {const wrapper = {get value() {track(wrapper, 'value') // 依赖追踪return value},set value(newVal) {value = newValtrigger(wrapper, 'value') // 触发更新}}return wrapper
}

🧩 逻辑复用模式

自定义Hook示例

// useCounter.js
import { ref, computed } from 'vue'export default function useCounter(initialValue = 0) {const count = ref(initialValue)const double = computed(() => count.value * 2)function increment() {count.value++}function reset() {count.value = initialValue}return {count,double,increment,reset}
}// 组件使用
<script setup>
import useCounter from './useCounter'const { count, increment } = useCounter(10)
</script>

与Mixin对比优势

维度Mixin组合式函数
命名冲突容易发生变量作用域隔离
隐式依赖需要查看mixin源码显式参数传递
类型支持困难完美支持TS
逻辑复用整个mixin按需引用
可测试性困难独立测试

🏆 最佳实践

代码组织规范

<script setup>
// 1. 外部导入
import { useRouter } from 'vue-router'// 2. Props定义
const props = defineProps({title: String
})// 3. 事件定义
const emit = defineEmits(['submit'])// 4. 组合式函数
const { data } = useFetch('/api')// 5. 响应式状态
const searchQuery = ref('')// 6. 计算属性
const filteredList = computed(() => {return list.value.filter(item => item.includes(searchQuery.value))
})// 7. 生命周期
onMounted(() => {console.log('组件已挂载')
})// 8. 方法定义
function handleSubmit() {emit('submit', { data })
}// 9. 暴露API
defineExpose({reset: () => { searchQuery.value = '' }
})
</script>

性能优化技巧

  1. 响应式优化

    // 批量更新
    import { nextTick } from 'vue'const updateData = () => {data.value = bigDatanextTick(() => {// DOM更新后操作})
    }
    
  2. 侦听器优化

    watch(() => props.list, (newVal) => {// 处理逻辑},{ deep: true, immediate: true }
    )
    
  3. 内存管理

    onUnmounted(() => {// 清除定时器/事件监听
    })
    
  4. 组件分割

    // 大型组件拆分为多个<script setup>文件
    import ChartSection from './ChartSection.vue'
    import DataTable from './DataTable.vue'
    

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com