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

vue系列==vue3新语法

vue系列==vue3新语法

1、setup组合式API入口函数

2、利用ref函数定义响应式数据

3、利用reactive函数定义响应式数据


1、setup组合式API入口函数

1、Vue3为组合式API提供了一个setup函数,所有组合式API函数都是在此函数中调用的,它是组合式API的使用入口。setup函数接收两个参数:第1个参数是props对象,包含传入组件的属性;第2个参数是context上下文对象,包含attrs、emit、slot等对象属性。这两个参数在本节暂时不做深入讲解,在第4章中开始对它们进行学习。在使用组合式API定义响应式数据之前,有两个点需要我们重点关注:一个是setup函数必须返回一个对象,在模板中可以直接读取对象中的属性,以及调用对象中的函数;另一个是setup函数中的this在严格模式下是undefined,不能像选项式API那样通过this来进行响应式数据的相关操作

2、但是下面的代码却不能自动修改messge的值,因为他不是一个响应式的函数,所有不能进行响应式更改

  <p>vue3新语法</p>
  <div >{{ message }}</div>
  <div><a :href="href">{{ href }}</a></div>
  <div v-if="ok">This is OK</div>
  <button v-on:click="changeMessage">Change Message</button>

</template>
<script>
  export default {
    setup() {
      let message = 'Hello Vue 3.0'
      const href = "https://nodejs.org/zh-cn"
      const ok = true
      function changeMessage() {
        alert(message)
        message = 'ddddd'
      }
      return {
        message,
        href,
        ok,
        changeMessage
      }
    }
  }

2、利用ref函数定义响应式数据

1、ref是Vue3组合式API中常见的用来定义响应式数据的函数。ref函数接收一个任意类型的数据参数作为响应式数据,由Vue内部保存。ref函数返回一个响应式的ref对象,通过ref对象的value属性可以读取或者更新内部保存的数据。

2、下面的代码添加ref就可以变为响应式数据,更新的时候采用value的方式

3、ref函数除了可以接收基础类型的数据,还可以接收对象或数组类型的数据。

<template>
<!--  vue3新语法  -->
  <p>vue3新语法</p>
  <div >{{ message }}</div>
  <div><a :href="href">{{ href }}</a></div>
  <div v-if="ok">This is OK</div>
  <button v-on:click="changeMessage">Change Message</button>

</template>
<script>
  import {ref} from "vue";

  export default {
    setup() {
      let message = ref('Hello Vue 3.0')     //添加ref作为响应式数据
      const href = "https://nodejs.org/zh-cn"
      const ok = true
      function changeMessage() {       //添加方法,响应式数据改变时,方法也会改变,采用value.value方式
        alert(message.value)
        message.value = 'ddddd'
      }
      return {
        message,
        href,
        ok,
        changeMessage
      }
    }
  }

3、利用reactive函数定义响应式数据

1、Vue3提供了reactive函数,让开发者可以一次性定义包含多个数据的响应式对象。reactive函数接收一个包含n个基础类型或对象类型属性数据的对象参数,它会返回一个响应式的代理对象,一般我们称此对象为“reactive对象”​。

2、reactive函数进行的是一个深度响应式处理。也就是说,当我们通过reactive对象更新参数对象中的任意层级属性数据后,都会触发页面的自动更新。

3、如果你的数据结构比较简单,或者只需要跟踪顶层属性的变化,使用ref就足够了。但如果你的数据结构复杂,需要跟踪嵌套属性的变化,那么reactive会是更好的选择。

4、

<template>
<!--  vue3新语法  -->
  <p>vue3新语法</p>
  <div >{{ personref.person }}</div>
  <div >{{ personreactive.person }}</div>
  <div >{{ personreactive.msg }}</div>
  <div >{{ personreactive.person.name }}</div>
  <div >{{ personreactive.person.age }}</div>
  <div >{{ personreactive.trr }}</div>

  <button @click="changePersonRef">Change Person Ref</button>

  <button @click="changePersonReactive">Change Person Reactive</button>
  <button @click="changePersonReactiveMsg">Change Person Reactive Msg</button>
  <button @click="changePersonReactiveTrr">Change Person Reactive Trr</button>



</template>
<script>
import {reactive, ref} from "vue";

  export default {
    setup() {
      let personref = ref({person: 1, age: 20});     //ref 用于响应式数据
      let personreactive = reactive({
        msg: "hello",
        person:{name: "zhangsan", age: 20},
        trr: [1, 2, 3]
      })
      function changePersonRef() {
        personref.value.person = 2;
      }
      function changePersonReactive() {
        personreactive.person.name = "lisi";
      }
      function changePersonReactiveMsg() {
        personreactive.msg = "world";
      }
      function changePersonReactiveTrr() {
        personreactive.trr.push(4);
      }
      return {
        personref,
        personreactive,
        changePersonRef,
        changePersonReactive,
        changePersonReactiveMsg,
        changePersonReactiveTrr
      }
    },

  }

5、toRefs与toRef函数

1、toRefs函数能一次性将reactive对象包含的所有属性值都包装成ref对象,而toRef函数只能一次处理一个属性

2、使用reactive函数进行代码简化的问题

3、他的主要功能就是简化代码,从而可以提升可读性

4、下面是简化之后的代码

      const staterefs = toRefs(personreactive)
      return {
        personref,
        personreactive,
        changePersonRef,
        changePersonReactive,
        changePersonReactiveMsg,
        changePersonReactiveTrr,
        msg: staterefs.msg,
        name: staterefs.person.name,
        age: staterefs.person.age,
        trr: staterefs.trr,
      }


http://www.kler.cn/a/375367.html

相关文章:

  • 企业出海网络:SD-WAN与专线混合组网方案
  • 开源模型应用落地-Qwen2.5-7B-Instruct与TGI实现推理加速
  • 界面控件DevExpress WPF中文教程:Data Grid——卡片视图概述
  • 推荐一款功能强大的文字处理工具:Atlantis Word Processor
  • 【再谈设计模式】单例模式~唯一性的守护者
  • Python自动化数据库备份:以MySQL为例
  • 奥数与C++小学四年级(第十六题 魔法学院)
  • MATLAB生态环境数据处理与分析
  • 【OpenGL】知识点
  • Centos7.9 x86架构部署
  • 基于SSM+小程序的4S店客户管理系统(汽车2)
  • 练习LabVIEW第二十五题
  • WPF中实现PasswordBox的双向绑定
  • 《AI从0到0.5》之提示工程
  • 【办公类-04-04】华为助手导出照片视频分类(根据图片、视频的文件名日期导入“年-月-日”文件夹中,并转移到“年-月”文件中整理、转移到“年”文件夹中整理)
  • 云计算的优势及未来发展趋势
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(5)
  • 《高频电子线路》 —— 反馈型振荡器
  • BERT的中文问答系统27
  • Ceisum无人机巡检视频投放
  • AIGC生成式人工智能——泼天的富贵(三)
  • QT 加载库 找不到指定的模块
  • 软件测试学习笔记丨Selenium复用已打开浏览器
  • UI设计公司—兰亭妙微—提供优秀的医疗行业UI设计
  • vue-echarts使用
  • Mysql 5.7 grant 授权异常