const data = $ref(false)
data = true
//以上代码在编译时就会报错 [plugin:vite:vue] Assignment to constant variable
- 发布:2023-05-09 09:44
- 更新:2023-05-09 14:57
- 阅读:412
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: 22621.1413
HBuilderX类型: 正式
HBuilderX版本号: 3.7.11
手机系统: Android
手机系统版本号: Android 12
手机厂商: 华为
手机机型: 小米11 Ultra
页面类型: vue
vue版本: vue3
打包方式: 云端
项目创建方式: HBuilderX
示例代码:
操作步骤:
const data = $ref(false);
data = true
const data = $ref(false);
data = true
预期结果:
编译通过
编译通过
实际结果:
编译无法通过。[plugin:vite:vue] Assignment to constant variable
编译无法通过。[plugin:vite:vue] Assignment to constant variable
bug描述:
vite对vue 编译时的语法错误校验, 响应式语法糖 const data= $ref(0) 像这样的代理数据 做出修改 data= 1 ,编译时也会无法通过,提示 [plugin:vite:vue] Assignment to constant variable ,这是什么大便识别啊。 项目所有const 都得改let !! 无语了。 3.6.18之后的版本全部会这样,实在受不了 就来提个bug.. 希望官方看到了 能在下个版本修复。(官方给出的响应式语法糖声明确实都是let,我不明白是故意为之,还是都是巧合。提个帖子,看看哪位大佬能解答我的疑惑。v3响应式数据 操作的都是代理对象,不会影响声明数据本身,也就是无所谓const 或者let 这是我的理解)
3.7.13 测试正常,检查下代码编写,如确认框架问题,提供下测试工程
<script setup>
import {ref} from 'vue'
const title = ref('test title')
title.value = 'new title'
const test = ref('test')
test.value = 'new test'
</script>
const title = $ref(); const 改成 let 就行了,vue文档里这个特性也用的是let声明,另外reactivityTransform这个特性已经被取消了,至于为什么被取消你现在有没有感受到一丁点?你这还没开始呢就已经出现问题了
-
8***@qq.com (作者)
reactivityTransform 在vue主包中被取消,但是可以同引入插件的方式使用,这个宏编译不要太好用,我的项目已经使用1年了,只是Hbuilder 更新后 出现了如上的问题,被删除的原因官方github 上有,无法更好兼容TS 同时组合式API 的部分功能与宏编译产生的功能问题与性能问题 无法得到解决 如provide inject. 文档上都有可以去看看,不用故弄玄虚。并不是还没开始就出问题,对于小型项目 语法糖轻量化优势明显。let 与const 的问题确实官方的例子给出的都是let ,我提出疑问的时候想当然了,觉得既然v3 操作的是代理数据,就不应该对我cosnt 或let 类型进行强制性校验。
2023-05-10 15:11
8***@qq.com (作者)
你好 我这里用了setup语法糖,vite.config.js 配置了 uni({
vueOptions: {
reactivityTransform: true // 开启响应式语法糖
}
})
在 const title = $ref();
title = '早上好';
在编译阶段就会报错 [plugin:vite:vue] Assignment to constant variable.
这样就不行
2023-05-09 11:15
8***@qq.com (作者)
我上传了一个新建项目的 代码 你可以试试,真跑不动。 改成let 就可以 真的很无语。
2023-05-09 11:17
DCloud_UNI_WZF
回复 8***@qq.com: 用 title.value 修改,基本常识
2023-05-09 11:39
8***@qq.com (作者)
回复 DCloud_UNI_WZF: 这就是dcloud前端的风采吗?你都不知道我在说什么是吗? 看文档https://cn.vuejs.org/guide/extras/reactivity-transform.html#refs-vs-reactive-variables
2023-05-10 15:01
DCloud_UNI_WZF
回复 8***@qq.com: 这本身就是一个实验性的特性,并且已经废弃,uniapp 基于 vue, vue 已不支持,uniapp 编译如何支持?
2023-05-10 17:17
8***@qq.com (作者)
回复 DCloud_UNI_WZF: 那么为何uniapp 在 vite-plugin-uni插件中 提供vueOption:{reactivityTransform: true // 开启响应式语法糖},官方将响应式语法糖从vue主包中剔除并声明如果需要使用可通过插件的方式引用,uniapp也提供了以上插件给出了支持。我的问题是在宏编译过程中,强制校验 被const 或let声明的代理数据是否合理,如果这个行为和uniapp 无关,你大可以说是vue的问题。你这给我个.value的回答我是没想到的。
2023-05-11 10:59