最近you发布了vue的function rfc 引发了很多的争论
- 介绍了 Vue 3 里基于函数的 API。
- 许多我们正在使用的特性都会被弃用,诸如 data、computed、methods、watch、mixin、extends 和生命周期函数。Vue 组件主要由一个叫做 setup() 的函数构成,这个函数会返回所有的 method、计算属性和监听器。
- 如果你想继续使用旧版功能,Vue 会提供一个兼容版本。
function api https://github.com/vuejs/rfcs/blob/function-apis/active-rfcs/0000-function-api.md

function api
import { state, computed } from "vue";export default {setup() {// Pet nameconst petNameState = state({ name: "", touched: false });const petNameComment = computed(() => {if (petNameState.touched) {return "Hello " + petNameState.name;}return null;});const onPetNameBlur = () => {petNameState.touched = true;};// Pet sizeconst petSizeState = state({ size: "", touched: false });const petSizeComment = computed(() => {if (petSizeState.touched) {switch (this.petSize) {case "Small":return "I can barely see your pet!";case "Medium":return "Your pet is pretty average.";case "Large":return "Wow, your pet is huge!";default:return null;}}return null;});const onPetSizeChange = () => {petSizeState.touched = true;};// All properties we can bind to in our templatereturn {petName: petNameState.name,petNameComment,onPetNameBlur,petSize: petSizeState.size,petSizeComment,onPetSizeChange};}};
就我看下来,感觉还蛮好的,比之前的写法简介了很多,相对于之前对象的键值对形式,显式的声明data computed methods 这些,简洁了很多,还有了命名空间。我喜欢易于理解的函数和组件。
**
完善的 Typescript 支持
新语法可以有完整的 Typescript 支持,这在 Vue 2.x 基于对象的语法中很难实现。
热心网友在reddit发的帖子
后来尤在hackernews上的回复
- Vue 3.0 会有一个标准版本,包含新 API 和旧 API,同时会额外提供一个轻量版本,这个版本会删除一些旧 API,以使 Vue 更小更快。
- 新的 API 完全是额外加到 Vue 2.x 里的,不会有任何 break change。
