当前位置: 首页 > news >正文

vue3:ref 实现 基本数据类型响应式,reactive:实现 对象类型响应式

<template>
  <div class="person">
    <h2>姓名:{{ name }}</h2>
    <h2>年龄:{{ age }}</h2>
    <button @click="changeName">修改名字</button>
    <button @click="changeAge">修改年龄</button>
    <button @click="showTel">查看联系方式</button>
  </div>
</template>


<script lang="ts" setup name="person234">
import { ref } from 'vue' //想让哪个数据是响应式的,就用ref包裹

    // 定义数据
    //ref()是一个函数,用来包裹数据,让数据变成响应式的
      let name = ref('张三')
      let age = ref(25)
      let tel = '123-456-7890'
      
      console.log(name)
      
    // 定义方法
      function changeName() {
        name.value = '李四'

        console.log(name)
      }
      function changeAge() {
        age.value = 30
      }
      function showTel() {
        alert(tel)
        console.log(tel)
      }
</script>

<style scoped>
.person {
    background-color: rgb(25, 120, 109);
    box-shadow: 0 0 10px;
    border-radius: 10px;
    padding: 20px;
  }
button {
  margin: 10px;
}
</style>

ref() 包裹之后,name就变成了一个对象 

 

<template>
  <div class="person">
    <h2>一辆{{ car.brand }}车,价值{{ car.price }}w</h2>
    <button @click="changePrice">修改汽车价格</button>
    <hr>
    <h2>喜欢的游戏:</h2>
    <ul>
      <li v-for="g in games" :key="g.id">{{ g.name }}</li>
    </ul>
    <button @click="changeFirstgame">修改第一个游戏</button>
    <hr>
    <button @click="changeC">修改c的值:{{ obj.a.b.c }}</button>
  </div>
</template>

<script lang="ts" setup name="Person">
  import { reactive } from 'vue'
    // 定义数据
    //reactive()是一个函数,用来包裹对象数据,让其变成响应式的
  let car1 = {brand: '宝马', price: 200 }
  let car = reactive({ brand: '奔驰', price: 100 })
  console.log(car1)
  console.log(car)

  let games = reactive([
        {id: 1, name: '王者荣耀'},
        {id: 2, name: '英雄联盟'},
        {id: 3, name: '绝地求生'}
  ])
  //不管c的值有多深的嵌套,只要是reactive包裹的,都是响应式的
  let obj = reactive({
  a: {
    b: {
      c: 10
    }
  }
  })
    // 定义方法
  function changePrice() {
    car.price += 10
  }

  function changeFirstgame() {
    games[0].name = '植物大战僵尸'
  }
  function changeC() {
    obj.a.b.c = 100
  }
</script>

<style scoped>
.person {
    background-color: rgb(25, 120, 109);
    box-shadow: 0 0 10px;
    border-radius: 10px;
    padding: 20px;
  }
button {
  margin: 10px;
}
li {
  font-size: 20px;
}
</style>

 ​​​​​​

 

相关文章:

  • 鸿蒙NEXT应用App测试-通用测试
  • 基于Nanopi duo2的WiFi智能摄像头
  • PW_Balance
  • 分布式简单理解
  • windows上vscode cmake工程搭建
  • 华为昇腾服务器(固件版本查询、驱动版本查询、CANN版本查询)
  • 8.python文件
  • UDP和TCP
  • 基于Java+SpringBoot+Vue的前后端分离的火车订票管理系统
  • Docker 容器
  • Android:权限permission申请示例代码
  • 如何在Vue中更优雅地处理403错误?
  • ubuntu24.04无法安装向日葵,提示依赖libgconf-2-4怎么办?
  • win10把c盘docker虚拟硬盘映射迁移到别的磁盘
  • Windows 图形显示驱动开发-上下文监视
  • 使用Ubuntu搭建Java部署环境
  • QPainter绘制3D 饼状图
  • VMware NSX 4.X Professional V2(2V0-41.24)题库
  • 软考高级信息系统项目管理师笔记-第2章信息技术发展
  • Python开源项目月排行 2025年1月
  • php装修公司网站源码/seo快速排名服务
  • 自己做网站 服务器/优化工具箱下载
  • 上海企业网站建设哪家好/八爪鱼磁力搜索引擎
  • 漳州市网站建设/微信引流推广怎么找平台
  • wordpress无限滚动和加载更多按钮/优化网站seo策略
  • 家居装修企业网站源码/免费企业建站