近日,Vue 作者尤雨溪在社区意见征求稿(RFC)上提交了一份 Ref 语法糖的提案,引起了开发者们的争议。
起因是一个新语法糖
尤雨溪在该 Ref 语法糖的提案中加入了一个新的功能:在单个文件组件(SFC)中引入了新的 script 标签写法,写法为 。这种写法会自动将所有顶级变量声明公开给模板(template)使用。同时在
中引入了一个基于编译器的语法糖,用于消除 ref 的 value 属性,该语法糖在编译期间自动将语法糖转为正常代码。
在 RFC 中,用一段 HTML 代码进行了举例。编译前,代码为:
<script setup>
// declaring a variable that compiles to a ref
ref: count = 1
<p>function inc() {
// the variable can be used like a plain value
count++
}</p>
<p>// access the raw ref object by prefixing with $
console.log($count.value)
</script></p>
<template>
<button @click="inc">{{ count }}</button>
</template>
编译后,代码为:
<script setup>
import { ref } from 'vue'
<p>export default {
setup() {
const count = ref(1)</p>
<pre><code>function inc() {
count.value++
}
console.log(count.value)
return {
count,
inc
}
} }
引发争议
该语法糖提案发布后,很多开发者在下方留言表示反对。引起开发者们反对的主要原因在于几个方面:对 JavaScript 的魔改太严重;为什么用标签语法而不是直接发明新语法;感觉心智负担变重了等等。部分反对者认为 Vue 此举是想挑战标准,对这种反标准的行为持反对态度。
Comments