Vue3_响应式数据和setup语法糖

目录

使用vite创建一个vue + JavaScript项目

clike 复制代码
npm create vite

进入项目目录下,然后执行如下命令

clike 复制代码
npm i

启动项目
npm run dev

删除不必要的基础结构

main.js中删除样式

删除App.vue中不必要内容

只保留如下内容

添加代码功能

clike 复制代码
<script >
export default{
  setup(){
    // 定义一些要展示到html上的一些数据   变量/对象
    let counter = 100
    function counterIncr(){
        counter++
    }
    function counterDesc(){
        counter--
    }
    function showCounter(){
      alert(counter)
    }

    return{
      counter,
      counterIncr,
      counterDesc,
      showCounter
    }
    
  }
}
</script>

<template>
<div>
  <button @click="counterIncr">+</button>
  <span v-text="counter"></span>
  <button @click="counterDesc">-</button>
  <button @click="showCounter">显示值</button>

</div>
 
</template>

<style scoped>

</style>

v-text表示将某个变量的值作为双标签中的文本来展示

此时只有窗口上显示值变化,页面上的不变,可通过如下方式解决

响应式数据

在数据变化时,vue框架会将变量最新的值更新到dom树中,页面数据就是实时最新的

非响应式数据

在数据变化时,vue框架不会将变量最新的值更新到dom树中,页面数据就不是实时最新的

在vue2中,数据不做特殊处理,默认就是响应式的

vue3中,数据要经过ref / reactive函数的处理才是响应式的

ref reactive函数是vue框架给我们提供的方法,导入进来即可使用

clike 复制代码
import {ref} from 'vue'

script标签中,操作ref的响应式数据需要通过.value的形式操作

template标签中,操作ref的响应式数据,无需使用.value

clike 复制代码
<script >
import {ref} from 'vue'
export default{
  setup(){
    // 定义一些要展示到html上的一些数据   变量/对象
    let counter = ref(100)
    function counterIncr(){
        counter.value++
    }
    function counterDesc(){
        counter.value--
    }
    function showCounter(){
      alert(counter.value)
    }

    return{
      counter,
      counterIncr,
      counterDesc,
      showCounter
    }
    
  }
}
</script>

<template>
<div>
  <button @click="counterIncr">+</button>
  <span v-text="counter"></span>
  <button @click="counterDesc">-</button>
  <button @click="showCounter">显示值</button>

</div>
 
</template>

<style scoped>

</style>

问题解决

setup语法糖

可以通过setup语法糖简化该代码

clike 复制代码
<script setup >
import {ref} from 'vue'

    // 定义一些要展示到html上的一些数据   变量/对象
    let counter = ref(100)
    function counterIncr(){
        counter.value++
    }
    function counterDesc(){
        counter.value--
    }
    function showCounter(){
      alert(counter.value)
    }


</script>

<template>
<div>
  <button @click="counterIncr">+</button>
  <span v-text="counter"></span>
  <button @click="counterDesc">-</button>
  <button @click="showCounter">显示值</button>

</div>
 
</template>

<style scoped>

</style>
相关推荐
摘星编程7 分钟前
用React Native开发OpenHarmony应用:Calendar日期范围选择
javascript·react native·react.js
东东51627 分钟前
基于vue的电商购物网站vue +ssm
java·前端·javascript·vue.js·毕业设计·毕设
MediaTea33 分钟前
<span class=“js_title_inner“>Python:实例对象</span>
开发语言·前端·javascript·python·ecmascript
雨季6661 小时前
Flutter 三端应用实战:OpenHarmony “微光笔记”——在灵感消逝前,为思想点一盏灯
开发语言·javascript·flutter·ui·dart
编码者卢布1 小时前
【Azure Stream Analytic】用 JavaScript UDF 解决 JSON 字段被转成 Record 的关键点
javascript·json·azure
0思必得01 小时前
[Web自动化] Selenium执行JavaScript语句
前端·javascript·爬虫·python·selenium·自动化
tb_first2 小时前
SSM速通2
java·javascript·后端
摘星编程4 小时前
用React Native开发OpenHarmony应用:StickyHeader粘性标题
javascript·react native·react.js
A_nanda4 小时前
c# 用VUE+elmentPlus生成简单管理系统
javascript·vue.js·c#
天天进步20154 小时前
Motia事件驱动的内核:深入适配器(Adapter)层看消息队列的流转
javascript