vue的setup函数

news2024/10/6 22:30:16

 为了开始使用Composition API,我们需要有一个可以实际使用它(编写代码)的地方;
 在Vue组件中,这个位置就是 setup 函数;
◼ setup其实就是组件的另外一个选项:
 只不过这个选项强大到我们可以用它来替代之前所编写的大部分其他选项;
 比如methods、computed、watch、data、生命周期等等;

0.最基础的setup使用

<template>
	<div class="">
		<h2>message:{{message}}</h2>
	</div>
</template>

<script>
export default {
	setup()
	{
		const message="hello"
		return {
			message
		}
	}
}

</script>

<style scoped>
</style>

1.setup实现计数器

因为setup定义的数据非响应式,counter不能即时改变,所以引入了ref函数和.value属性

这里可以看到原本的method,data,computed都放在了setup内部,功能模块的实现由分散变为集中

<template>
  <div class="app">
    <!-- template中ref对象自动解包 -->
    <h2>当前计数: {{ counter }}</h2>
    <button @click="increment">+1</button>
    <button @click="decrement">-1</button>
  </div>
</template>
 
<script>
import { ref } from 'vue'
 
export default {
  setup() {
    // 1.定义counter的内容
    // 默认定义的数据都不是响应式数据
    let counter = ref(100)
    const increment = () => {
      counter.value++
      console.log(counter.value)
    }
    const decrement = () => {
      counter.value--
    }
 
    return {
			counter,
			increment,
			decrement
    }
  }
}
</script>
 
<style>
</style>

 2.reactive api 实现响应式

如果想为在setup中定义的数据提供响应式的特性,那么我们可以使用reactive的函数:
◼ 那么这是什么原因呢?为什么就可以变成响应式的呢?
 这是因为当我们使用reactive函数处理我们的数据之后,数据再次被使用时就会进行依赖收集;
 当数据发生改变时,所有收集到的依赖都是进行对应的响应式操作(比如更新界面);
 事实上,我们编写的data选项,也是在内部交给了reactive函数将其编程响应式对象的;

但是reactive不可用对应简单的数据比如单纯的counter使用,可以对对象使用

但是注意要import此函数

<template>
  <div>
    <h2>message: {{ message }}</h2>
    <button @click="changeMessage">修改message</button>
    <hr>
    <h2>账号: {{ account.username }}</h2>
    <h2>密码: {{ account.password }}</h2>
    <button @click="changeAccount">修改账号</button>

  </div>
</template>
 
<script>
  import { reactive} from 'vue'
 
  export default {
    setup() {
      let message = "Hello World"
      function changeMessage() {
        message = "你好啊,李银河!"
        console.log(message)
      }
 
      const account = reactive({
        username: "coderwhy",
        password: "123456"
      })
      function changeAccount() {
        account.username = "kobe"
      }
 
 
      return {
        message,
        changeMessage,
        account,
        changeAccount,
      }
    }
  }
</script>
 
<style scoped>
</style>

 下方使用了响应式数据,点击按钮会响应式变化,上面则不会

3.ref api实现简单数据响应式

reactive API对传入的类型是有限制的,它要求我们必须传入的是一个对象或者数组类型:
 如果我们传入一个基本数据类型(String、Number、Boolean)会报一个警告;
◼ 这个时候Vue3给我们提供了另外一个API:ref API
 ref 会返回一个可变的响应式对象,该对象作为一个响应式的引用 维护着它内部的值,这就是ref名称的来源;
 它内部的值是在ref的 value 属性中被维护的;
◼ 这里有两个注意事项:
 在模板中引入ref的值时,Vue会自动帮助我们进行解包操作,所以我们并不需要在模板中通过 ref.value 的方式来使用;
 但是在 setup 函数内部,它依然是一个ref引用, 所以对其进行操作时,我们依然需要使用 ref.value的方式;

<template>
  <div>
    <h2>当前计数: {{ counter }}</h2>
    <button @click="increment">+1</button>
    <button @click="counter++">+1</button>
  </div>
</template>
 
<script>
  import {ref } from 'vue'
 
  export default {
    setup() {
      // 2.2.ref函数: 定义简单类型的数据(也可以定义复杂类型的数据)
      // counter定义响应式数据
      const counter = ref(0)
      function increment() {
        counter.value++
      }
      return {
        counter,
        increment,
      }
    }
  }
</script>
 
<style scoped>
</style>

 

<template>
  <div>
    <h2>message: {{ message }}</h2>
    <button @click="changeMessage">修改message</button>
    <hr>
    <h2>账号: {{ account.username }}</h2>
    <h2>密码: {{ account.password }}</h2>
    <button @click="changeAccount">修改账号</button>
    <hr>
    <!-- 默认情况下在template中使用ref时, vue会自动对其进行解包(取出其中value) -->
    <h2>当前计数: {{ counter }}</h2>
    <button @click="increment">+1</button>
    <button @click="counter++">+1</button>
 
    <hr>
    <!-- 使用的时候不需要写.value -->
    <h2>当前计数: {{ info.counter }}</h2>
    <!-- 修改的时候需要写.value -->
    <button @click="info.counter.value++">+1</button>
  </div>
</template>
 
<script>
  import { reactive, ref } from 'vue'
 
  export default {
    setup() {
      // 1.定义普通的数据: 可以正常的被使用
      // 缺点: 数据不是响应式的
      let message = "Hello World"
      function changeMessage() {
        message = "你好啊,李银河!"
        console.log(message)
      }
 
      // 2.定义响应式数据
      // 2.1.reactive函数: 定义复杂类型的数据
      const account = reactive({
        username: "coderwhy",
        password: "123456"
      })
      function changeAccount() {
        account.username = "kobe"
      }
 
      // 2.2.ref函数: 定义简单类型的数据(也可以定义复杂类型的数据)
      // counter定义响应式数据
      const counter = ref(0)
      function increment() {
        counter.value++
      }
 
      // 3.ref是浅层解包
      const info = {
        counter
      }
 
      return {
        message,
        changeMessage,
        account,
        changeAccount,
        counter,
        increment,
        info
      }
    }
  }
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/796014.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么解决字符乱码的问题

目录 什么是字符乱码 字符乱码是什么原因 怎么解决字符乱码的问题 示例代码 什么是字符乱码 字符乱码是指在文本或字符编码中出现无法正确显示或解析的字符。当使用不同的字符编码格式读取或显示文本时&#xff0c;如果编码格式不匹配或不正确&#xff0c;就会导致字符乱码…

ASP.NET Core - 缓存之内存缓存

1. 缓存 缓存指的是在软件应用运行过程中&#xff0c;将一些数据生成副本直接进行存取&#xff0c;而不是从原始源&#xff08;数据库&#xff0c;业务逻辑计算等&#xff09;读取数据&#xff0c;减少生成内容所需的工作&#xff0c;从而显著提高应用的性能和可伸缩性&#x…

【Spring Cloud】Ribbon 中的几种负载均衡策略

文章目录 前言一、Ribbon 介绍二、负载均衡设置三、7种负载均衡策略3.1.轮询策略3.2.权重策略3.3.随机策略3.4.最小连接数策略3.5.重试策略3.6.可用性敏感策略3.7.区域敏感策略 前言 负载均衡通常有两种实现手段&#xff0c;一种是服务端负载均衡器&#xff0c;另一种是客户端…

Python中怎么处理字符编码问题

什么是字符编码 字符编码是一种将字符或文本表示为数字序列的方式&#xff0c;以便计算机能够理解和处理它们。由于计算机是基于二进制的&#xff0c;只能处理数字&#xff0c;因此需要将字符转换为对应的数字表示。 在字符编码中&#xff0c;每个字符都有一个唯一的编码值与…

中国古代掌握至高权力的8个女人

在封建社会&#xff0c;基本都是男尊女卑&#xff0c;女人想掌握权力比男人难太多了&#xff1b;但是数千年的历史积累沉淀&#xff0c;总也有几个不甘于现状的女人&#xff0c;一步步逐渐掌握国家的权力&#xff0c;但是能做到登基称帝的&#xff0c;仅有一人。 TOP、1 武则天…

Vue 本地应用-计数器

逻辑是在点击按钮的时候执行&#xff0c;那么要为按钮绑定点击事件&#xff0c;整体语法如下&#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>首页</title><link href"" type"text/c…

【雕爷学编程】Arduino动手做(95)---GY9960手势传感器模块5

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

年出货2亿台,只赚“辛苦钱”!又一家代工巨头押宝汽车电子

7月20日&#xff0c;作为国内ODM龙头之一的华勤技术正式启动招股&#xff0c;拟在上交所主板上市。此前&#xff0c;因技术先进性、科创属性不足等问题&#xff0c;该公司终止科创板IPO。 华勤技术成立于2005年&#xff0c;几年后赶上了全球智能手机的黄金时代&#xff0c;招股…

Moonbeam操作指南:使用区块链索引

索引是指组织数据库以快速查找特定数据。在区块链的背景下&#xff0c;如何储存数据至关重要 — — 通过重要状态变化期间发生的事件。 例如&#xff0c;假设您正在构建一个DApp&#xff0c;其中列出了特定NFT集合的全部所有者。您可以仔细查看该NFT系列销售中发出的所有转让事…

ubuntu安装pycharm No JRE found错误

参考资料&#xff1a; 《UBUNTU14.04 PYCHARM安装及NO JDK FOUND解决方法》 问题&#xff1a; 解决办法&#xff1a; 1.去java官网&#xff0c;下载相应的jdk文件&#xff1a; 2.下载完成后在 jdk-8u151-linux-x64.tar.gz 的运行以下命令&#xff1a; sudo mkdir /usr/lib/jv…

平台化设计产品存在的问题

产品&#xff1a;在将业务抽象成产品或组件时&#xff0c;需要考虑多个因素&#xff0c;包括闭环条款、持久性、可重用性等。只有当业务具备这些关键特征时&#xff0c;才能适合抽象成产品。否则&#xff0c;应该考虑将其作为组件的形式存在&#xff0c;或者使用规则引擎来可视…

谈谈你对Synchronized关键字的理解及使用

synchronized关键字最主要的三种使用方式的总结 修饰实例方法&#xff0c;作用于当前对象实例加锁&#xff0c;进入同步代码前要获得当前对象实例的锁修饰静态方法&#xff0c;作用于当前类对象加锁&#xff0c;进入同步代码前要获得当前类对象的锁 。也就是给当前类加锁&…

13 硬链接和软链接

13.1 硬链接和软链接的区别 硬链接&#xff1a;A---B&#xff0c;假设B是A的硬链接&#xff0c;那么只要存在一个&#xff0c;无论删除哪一个&#xff0c;文件都能访问得到。 软链接&#xff1a;类似于快捷方式&#xff0c;删除源文件&#xff0c;快捷方式就访问不了。 13.2 创…

流星特效案例代码

实际效果&#xff0c;代码下载即可使用 流星图片 <!-- 描述: 流星特效 作者: Jack GUO 日期: 20230727 --> <template> <div class"wrap-container sn-container"> <div class"pd-main-left"> <div class"yun-container&…

计算机组成原理问答6

总线 总线是一组能为多个部件分时共享的公共数据信息传送线路。 基本概念 特性:机械特性(尺寸、形状)、电气特性(传输方向、电平有效范围)、功能特性(数据、地址、控制信号)、时间特性(信号和时序的关系) 分类: 按数据传输格式:串行(一个比特一个比特的传输)…

30.文字自动出现

文字自动出现 html部分 <h1 id"text"></h1><div><label for"speed">速度</label><input type"number" name"speed" id"speed" min"1" max"10" value"1" …

力扣热门100题之字母异位词分组【中等】

题目描述 给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 输出: [[“bat”],[“na…

TimescaleDB压缩功能

注&#xff1a;本文翻译自https://legacy-docs.timescale.com/v1.7/using-timescaledb/compression 从1.5版本开始&#xff0c;TimescaleDB支持本地压缩数据的能力。此功能不需要使用任何特定的文件系统或外部软件&#xff0c;并且正如您将看到的&#xff0c;用户可以很容易地…

RDIFramework.NET 快速开发框架 WebEasyUI版本 V6.0发布

1、RDIFramework.NET EasyUI快速开发框架介绍 RDIFramework.NET&#xff0c;基于.NET的快速信息化系统开发、整合框架&#xff0c;为企业或个人快速开发系统提供了强大的支持&#xff0c;开发人员不需要开发系统的基础功能和公共模块&#xff0c;框架自身提供了强大的函数库和…

文心一言大数据模型-文心千帆大模型平台

官网&#xff1a; 文心千帆大模型平台 (baidu.com) 文心千帆大模型 (baidu.com) 模型优势 1、模型效果优&#xff1a;所需标注数据少&#xff0c;在各场景上的效果处于业界领先水平 2、生成能力强&#xff1a;拥有丰富的AI内容生成&#xff08;AIGC&#xff09;能力 3、应用…