1. 更好的 TS 支持
○ Props 和其它需要注入到 this 的属性导致类型声明依然存在问题
● 除了类型支持以外 Class API 并不带来任何新的优势
○ 有更好的选择...
const App = {
setup() {
// data
const count = value(0)
// computed
const plusOne = computed(() => count.value + 1)
// method
const increment = () => { count.value++ }
// watch
watch(() => count.value * 2, v => console.log(v))
// lifecycle
onMounted(() => console.log('mounted!'))
// 暴露给模版或渲染函数
return { count }
}
}

优势:
● 对比 Class API
○ 更好的 TypeScript 类型推导支持
○ 更灵活的逻辑复用能力
○ Tree-shaking 友好
○ 代码更容易被压缩
function useMousePosition() { const x = value(0) const y = value(0) const update = e => { x.value = e.pageX y.value = e.pageY } onMounted(() => { window.addEventListener('mousemove' , update) }) onUnmounted(() => { window.removeEventListener('mousemove' , update) }) return { x, y } }

复用:
new Vue({ template: `
Mouse position: x {{ x }} / y {{ y }}
`, data() { const { x, y } = useMousePosition() return { x, y, // ... other data } } })

优势:
● ✅没有命名空间冲突
● ✅ 数据来源清晰
● ✅ 没有额外的组件性能消耗
| 留言与评论(共有 0 条评论) |