Vue3技术3之setup的两个注意点、computed计算属性

news2024/11/19 14:28:05

Vue3技术3

  • setup的两个注意点
    • Vue2中的一些知识点
      • App.vue
      • Demo.vue
    • setup的两个注意点
      • 第一个注意点
        • App.vue
        • Demo.vue
      • 第二个注意点
        • App.vue
        • DemoTwo.vue
      • 总结
  • computed计算属性
    • App.vue
    • Demo.vue
    • 总结

setup的两个注意点

Vue2中的一些知识点

App.vue

<template>
  <div>
    <h1>我是Vue2写的效果</h1>
    <Demo msg="你好啊!"  speak="欢迎光临~">
      <span>今天学习生物学</span>
      <span>今天终于要结束了~</span>
    </Demo>
  </div>
</template>

<script>
import Demo from './components/Demo.vue'

export default {
  name: 'App',
  components: {
    Demo
  }
}
</script>

<style>
div{
  background-color: grey;
  height: 300px;
}
</style>

Demo.vue

<template>
<div>
  <h2>我是Demo组件</h2>
  <h2>{{msg}}</h2>
  <h2>{{$attrs.speak}}</h2>
  <slot></slot>
</div>
</template>

<script>
export default {
  name: "Demo",
  props:['msg'],
  mounted(){
    console.log(this)
  }
}
</script>

<style scoped>
div{
  background-color: orange;
  height: 200px;
}
</style>

在这里插入图片描述

setup的两个注意点

第一个注意点

App.vue

<template>
  <Demo></Demo>
</template>

<script>
import Demo from "@/components/Demo";
export default {
  name: 'App',
  components: {Demo},
}
</script>

Demo.vue

<template>
  <h1>一个人的信息</h1>
  <h2>姓名:{{person.name}}</h2>
  <h2>年龄:{{person.age}}</h2>
</template>

<script>
import {reactive} from 'vue'
export default {
    name: "Demo",
    beforeCreate() {
      console.log("---------beforeCreate-----------")
    },
    setup(){
      console.log("---------setup-----------",this)
      //数据
        let person=reactive({
          name:"张三",
          age:18
        })

      //返回一个对象(常用)
      return{
          person
      }
    },
}
</script>

<style scoped>

</style>

在这里插入图片描述

第二个注意点

App.vue

<template>
<!--  <Demo></Demo>-->
  <DemoTwo msg="你好啊" school="幸福中学" @hello="showHelloInfo">
    <template v-slot:first>
      <span>我是第一个插槽</span>
    </template>
    <template v-slot:second>
      <span>我是第二个插槽</span>
    </template>
  </DemoTwo>
</template>

<script>
// import Demo from "@/components/Demo";
import DemoTwo from "@/components/DemoTwo";
export default {
  name: 'App',
  components: {DemoTwo},
  setup(){
    function showHelloInfo(value){
      alert(`你好啊,你触发了hello事件,我收到的参数是:${value}`)
    }
    return{
      showHelloInfo
    }
  }
}
</script>

DemoTwo.vue

<template>
  <h1>一个人的信息</h1>
  <h2>姓名:{{person.name}}</h2>
  <h2>年龄:{{person.age}}</h2>
  <button @click="test">测试一下触发Demo组件的hello事件</button>
</template>

<script>
import {reactive} from 'vue'
export default {
    name: "DemoTwo",
    props:['school','msg'],
    emits:['hello'],
    setup(props,context){
      //数据
        let person=reactive({
          name:"张三",
          age:18
        })

      //setup的两个参数
      console.log("props",props)
      console.log("context",context)
      console.log("context.attrs",context.attrs) //相当于Vue2中的$attrs
      console.log("context.emit",context.emit) //触发自定义事件
      console.log("context.slots",context.slots) //插槽

      function test(){
          context.emit('hello',123456)
      }

      //返回一个对象(常用)
      return{
          person,
          test
      }
    },
}
</script>

<style scoped>

</style>

请添加图片描述

总结

  1. setup执行的时机
    在beforeCreate之前执行一次,this是undefined
  2. setup的参数
    (1)props:值为对象,包含:组件外部传递过来,且组件内部声明接收了的属性
    (2)context:上下文对象
    ① attrs:值为对象,包含:组件外部传递过来,但没有在props配置中声明的属性,相当于this.$attrs
    ②slots:收到的插槽内容,相当于this.$slots
    ③emit:分发自定义事件的函数,相当于this.$emit

computed计算属性

App.vue

<template>
  <Demo></Demo>
</template>

<script>
import Demo from "@/components/Demo";
export default {
  name: 'App',
  components: {Demo},
}
</script>

Demo.vue

<template>
  <h1>一个人的信息</h1>
  姓:<input type="text" v-model="person.lastName"> <br>
  名:<input type="text" v-model="person.firstName"> <br>
<!--  <span>全名:{{person.fullName}}</span>-->
  <span>全名:<input type="text" v-model="person.fullName"></span>
</template>

<script>
import {reactive,computed} from 'vue'
export default {
    name: "Demo",
    setup(){
      //数据
        let person=reactive({
          lastName:'张',
          firstName:"三"
        })

      //计算属性——简写(没有考虑到计算属性被修改的情况)
     /* person.fullName=computed(() => {
         return person.lastName+'-'+person.firstName
      })*/
      //计算属性——完整写法(考虑读和写)
      person.fullName=computed({
        get(){
          return person.lastName+'-'+person.firstName
        },
        set(value){
          const nameArr=value.split('-')
          person.lastName = nameArr[0];
          person.firstName = nameArr[1]
        }
      })

      //返回一个对象(常用)
      return{
          person
      }
    },
}
</script>

<style scoped>

</style>

请添加图片描述

总结

  1. 与Vue2.x中computed配置功能一致
  2. 写法
import {computed} from 'vue'

setup(){
	...
	//计算属性——简写
	let fullName=computed(() => {
         return person.lastName+'-'+person.firstName
    })
   //计算属性——完整写法(考虑读和写)
    let fullName=computed({
        get(){
          return person.lastName+'-'+person.firstName
        },
        set(value){
          const nameArr=value.split('-')
          person.lastName = nameArr[0];
          person.firstName = nameArr[1]
        }
      })
}

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

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

相关文章

CnOpenData制造业单项冠军企业工商注册基本信息数据

一、数据简介 2016年3月&#xff0c;工信部印发《制造业单项冠军企业培育提升专项行动实施方案》&#xff0c;方案指出&#xff1a;“到2025年&#xff0c;总结提升200家制造业单项冠军示范企业&#xff0c;发现和培育600家有潜力成长为单项冠军的企业”。截至2022年&#xff0…

工程行业管理系统-专业的工程管理软件-提供一站式服务

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目显示…

基于Python的简单40例和爬虫详细讲解(文末赠书)

目录 先来看看Python40例 学习Python容易坐牢&#xff1f; 介绍一下什么是爬虫 1、收集数据 2、爬虫调研 3、刷流量和秒杀 二、爬虫是如何工作的&#xff1f; 三、爬虫与SEO优化 什么是python爬虫 Python爬虫架构 最担心的问题 本期送书 随着人工智能以及大数据的兴起…

《JavaEE》HashTable、HashMap、ConcurrentHashMap

目录 HashTable HashMap ConcurrentHashMap ​编辑 HashTable与ConcurrentHashMap的区别 &#x1f451;作者主页&#xff1a;Java冰激凌 &#x1f4d6;专栏链接&#xff1a;JavaEE 进入到线程模块 必不可少的就是接触到线程安全的数据结构 例如StringBuffer、BlockingQueu…

计网第五章.运输层—TCP的拥塞控制

以下来自湖科大计算机网络公开课笔记及个人所搜集资料 目录一、拥塞控制与流量控制1.1 拥塞控制的目的1.2 区分拥塞控制与流量控制二、四种拥塞控制算法2.1 慢开始和拥塞避免2.2 快重传2.3 快恢复一、拥塞控制与流量控制 1.1 拥塞控制的目的 先看一下什么是拥塞&#xff1a; …

AVL树介绍

AVL树AVL树的概念AVL树结点的定义AVL树的插入AVL树的旋转&#xff08;1&#xff09;左单旋&#xff08;2&#xff09;右单旋&#xff08;3&#xff09;左右双旋&#xff08;4&#xff09;右左双旋AVL树的验证AVL树的性能AVL树的概念 二叉搜索树虽然可以提高我们查找数据的效率…

第三章 Linux实际操作——vi和vim编辑器

第三章 Linux实际操作——vi和vim编辑器3.1 vi和vim的基本介绍3.2 vi和vim常用的三种3.2.1 正常模式3.2.2 插入模式3.2.3 命令行模式3.3 vi和vim基本使用3.4 各种模式的相互切换3.5 vi和vim的快捷键3.1 vi和vim的基本介绍 Linux系统会内置 vi文本编辑器Vim具有程序编辑的能力&…

hadoop单机版安装

文章目录1. 将安装包hadoop-3.1.3.tar.gz上次至linux中2. 进行解压操作3. 修改目录名称4. 配置环境变量5. 使用官方提供的jar包实现wordcount案例1. 将安装包hadoop-3.1.3.tar.gz上次至linux中 2. 进行解压操作 tar -zxvf hadoop-3.1.3.tar.gz -C /opt/softs/##tar: 解压打包的…

TikTok听证会后:走不出的隐私风暴和出不了的海

TikTok听证会结束一周。 这场来自大洋彼岸的漩涡紧扣着中国科技圈的心弦&#xff0c;这不是一场稀松平常的热点&#xff0c;而是一次样本实例的演绎&#xff0c;每一个企图出海&#xff0c;扩展生意版图的中国企业们&#xff0c;都在密切关注&#xff0c;希望在TikTok身上找到…

快排非递归/归并排序/排序总结

一、非递归实现快排 在某些情景下&#xff0c;递归可以利用分治思想&#xff0c;将一个问题转化为多个子问题&#xff0c;再转化为更多个最小规模的子问题。从而帮助我们解决问题。 但是&#xff0c;递归可能在效率和内存上产生问题。现如今&#xff0c;由于编译器的进一步优化…

图像分割中的混淆矩阵和利用混淆矩阵计算指标

目录 1. 介绍 2. 创建混淆矩阵 2.1 update 方法 2.2 compute 方法 2.3 str 方法 3. 测试 4. 完整代码 1. 介绍 语义分割中&#xff0c;性能指标可以利用混淆矩阵进行计算 这里实现的方法和图像分类中不一样&#xff0c;需要的可以参考&#xff1a;混淆矩阵Confusion M…

大数据技术——spark集群搭建

目录 spark概述 spark集群搭建 1.Spark安装 2.环境变量配置 3.Spark集群配置 4.启动Spark集群 存在问题及解决方案 请参考以下文章 spark概述 Spark是一个开源的大数据处理框架&#xff0c;它可以在分布式计算集群上进行高效的数据处理和分析。Spark的特点是速度快、易…

多路I/O转接 poll(了解)

poll() 的机制与 select() 类似&#xff0c;与 select() 在本质上没有多大差别&#xff0c;管理多个描述符也是进行轮询&#xff0c;根据描述符的状态进行处理&#xff0c;但是 poll() 没有最大文件描述符数量的限制&#xff08;但是数量过大后性能也是会下降&#xff09;。 p…

Java 进阶(8) 线程常用方法

常用方法 方法名 说明 public static void sleep(long millis) 当前线程主动休眠 millis 毫秒。 public static void yield() 当前线程主动放弃时间⽚&#xff0c;回到就绪状态&#xff0c;竞争下⼀次时间⽚。 public final void join() 允许其他线程加⼊到当前线程中。…

什么是缓存穿透、缓存雪崩、缓存击穿

缓存穿透 缓存穿透 &#xff1a;缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库&#xff0c;失去了缓存保护后端存储的意义。 解决方案 缓存空值 如果访问数据库后还未命中&#xff0c;则把一…

JVM OOM问题排查与解决思路

OOM原因 1. 堆溢出 报错信息&#xff1a; java.lang.OutOfMemoryError: Java heap space 代码中可能存在大对象分配&#xff0c;无法获得足够的内存分配 可能发生内存泄露&#xff0c;导致内存被无效占用以至于耗尽 2. 永久代/元空间溢出 报错信息&#xff1a; java.lang.O…

Python黑马程序员(Spark实战)笔记

1、基础准备 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspark # 导包 from pyspark import SparkConf,SparkContext #创建SparkConf类对象 confSparkConf().setMaster("local[*]").setAppName("test_spark_app") #基于SparkXConf类对象创…

(十一)排序算法-选择排序

1 基本介绍 选择排序也属于内部排序法&#xff0c;是从欲排序的数据中&#xff0c;按指定的规则选出某一元素&#xff0c;再依规定交换位置后达到排序的目的。 动画展示&#xff1a; 选择排序思想&#xff1a; 选择排序&#xff08;select sorting&#xff09;也是一种简单的…

【刷题篇】栈和队列

目录 一.前言&#x1f308; 二.有效的括号✨ a.题目 b.题解分析 c.AC代码 三. 用队列实现栈&#x1f4cf; a.题目 b.题解分析&#xff08;辅助队列法&#xff09; c.AC代码&#xff08;辅助队列法&#xff09; d.题解分析&#xff08;就地存储法&#xff09; c.AC代…

全面带你了解AIGC的风口

前言 一、AIGC的介绍 二、AIGC 的几个主要作用 三、实现AIGC过程的步骤 四、科技新赛道AIGC开始火了 五、AIGC对世界产生广泛的影响 六、AIGC技术的主要风口 &#x1f618;一、AIGC的介绍 AIGC (AI Generated Content) 是指通过人工智能技术生成的各种类型的内容&#xff0c;…