以下是 Vue3 前端开发者常犯的 6 大典型错误及解决方案:
常见错误:
ref
和 reactive
的使用场景reactive
对象属性(应使用 Object.assign
)// 错误示例
const state = reactive({ count: 0 })
const { count } = state // 解构后失去响应性
// 正确做法
const count = ref(0)
const state = reactive({ count })
// 或使用 toRefs
const state = reactive({ count: 0 })
const { count } = toRefs(state)
常见错误:
setup()
中使用 Options API 的钩子命名(如 mounted
)onUnmounted
清理副作用// 错误示例
setup() {
mounted(() => { /* ... */ }) // 应该用 onMounted
}
// 正确做法
import { onMounted } from 'vue'
setup() {
onMounted(() => {
const timer = setInterval(...)
onUnmounted(() => clearInterval(timer)) // 清理逻辑
})
}
常见错误:
props
传递深层数据v-model
语法糖在 Vue3 中的变化(modelValue
+ update:modelValue
)// 子组件
props: ['modelValue'],
emits: ['update:modelValue']
// 父组件
<Child v-model="value" />
常见错误:
setup()
中// 错误示例
if (condition) {
onMounted(...) // 必须放在顶层
}
// 正确做法:按功能拆分逻辑
useUserAPI()
useDataFetching()
常见错误:
v-for
不使用 key
或使用索引当 keywatch(fn, { deep: true })
导致性能损耗v-memo
优化静态列表// 优化示例
<div v-for="item in list" :key="item.id" v-memo="[item.id]">
{{ item.content }}
</div>
常见错误:
推荐结构:
/src
/components // 基础组件
/composables // 可复用逻辑
/views // 路由组件
/stores // 状态管理
<script setup>
语法糖提升代码简洁度defineProps/defineEmits
进行明确的组件接口声明理解这些常见问题并遵循 Vue3 的设计模式,可以显著提升代码质量和开发效率。