Vue.js中Options API因何得名?其作为API的本质是什么?
你之前对API的认知——「API是软件中介,实现两个软件模块之间的通信」——只覆盖了跨服务、跨应用调用的狭义API场景,并不是API的完整定义。
现代技术语境下,API的核心本质是一套系统对外暴露的、供使用者调用内部能力的约定规则:
- 使用者完全不需要了解系统内部的实现细节
- 只要严格按照规则要求的格式传入内容、调用对应方法,就能获得系统提供的目标能力
举个最贴近日常开发的例子:你写JavaScript时调用的Array.push(),就是JS运行时给数组对象暴露的API。你不需要知道V8引擎底层怎么给数组扩容、怎么操作内存地址,只要按规则传入要添加的元素,就能得到「元素追加到数组末尾」的结果。这个过程不存在两个独立软件的通信,只是你的业务代码和JS内置能力之间的交互约定,同样属于API的范畴。
回到你关于Options API的疑问:
Options API确实是Vue框架本身的组成部分,但它是Vue暴露给开发者、用来声明组件逻辑的一套约定接口,它连接的两个主体非常明确:
- 一侧是你编写的业务组件代码
- 另一侧是Vue框架内部的响应式系统、渲染引擎、生命周期调度等核心逻辑
它被命名为「Options API」,核心原因是这套交互约定要求你按照Vue预定义的固定选项(Option)来组织组件代码:
- 要定义响应式状态,就写到
data选项下 - 要定义组件实例方法,就写到
methods选项下 - 要在组件挂载完成后执行逻辑,就写到
mounted选项下 - 要定义派生的计算属性,就写到
computed选项下
使用这套规则写代码时,你完全不需要关心Vue内部怎么把data里的属性转成响应式、怎么收集依赖触发视图更新、怎么给methods里的方法绑定组件实例this、怎么在对应生命周期节点触发钩子,只要按要求填好对应选项的内容,Vue就会自动解析配置,渲染出可正常交互的组件。
这个交互逻辑和调用后端HTTP API没有本质区别:调用后端API时你按接口文档传参,就能使用服务端的能力;使用Options API时你按Vue的规则写配置,就能使用Vue的响应式、组件渲染能力,完全符合API的广义定义。
作为补充,Vue3推出的Composition API也是相同逻辑:它是Vue提供的另一套和框架交互的约定,你不需要按选项类型拆分逻辑,只要按照规则使用ref、reactive、onMounted等导入的函数组织代码,Vue同样可以正确解析运行组件,它本质也是Vue对外暴露的API。
内容的提问来源于stack exchange,提问作者Cur Fromsky

