Vue 3 setup语法糖用错,数据不更新!

Vue 3 setup语法糖用错,数据不更新!
💓 博客主页:瑕疵的CSDN主页
📝 Gitee主页:瑕疵的gitee主页
⏩ 文章专栏:《热点资讯》

Vue 3 setup语法糖用错?数据不更新的真相!

目录

昨天改需求,setup语法糖写得飞起。点按钮,页面count没变。气得想砸键盘。

报错现场

<scriptsetup>letcount=0// 这里埋雷functionincrement(){count++// 按钮点了没反应}</script>

核心根源
setup语法糖不是魔法。你写let count=0,Vue根本不知道count是响应式数据。
底层原理:Vue 3的响应式系统需要refreactive包装。setup语法糖只是省了return,但变量必须被响应式系统托管。
直接赋值count++,Vue监听不到变化,DOM自然不更新。坑死了,我debug到凌晨三点。

解决代码
必须用ref包裹,修改时加.value

<scriptsetup>import{ref}from'vue'// 关键!必须导入// 用ref创建响应式变量constcount=ref(0)// count是ref对象functionincrement(){count.value++// 必须加.value}</script>

对比错误 vs 正确

错误写法正确写法
let count = 0const count = ref(0)
count++count.value++
结果:不更新结果:正常更新

再看reactive写法(别和ref混用):

<scriptsetup>import{reactive}from'vue'conststate=reactive({count:0})// 用reactivefunctionincrement(){state.count++// 直接改属性,不用.value}</script>

避坑总结

  1. setup语法糖里,所有响应式数据必须用ref/reactive
    别用let/const直接声明变量。Vue不自动转成响应式。
  2. 修改时加.value
    ref用count.value++,reactive直接state.count++
  3. 别忘了import
    不写import { ref } from 'vue'?报错比数据不更新还惨。

记住:setup语法糖只是语法糖。底层还是Vue响应式系统在跑。
坑了我一晚上,别再踩了。
(写完这段,终于能去睡了)