【Vue3】setup参数细讲!computed计算属性和watch监听属性

news2024/11/17 5:55:13

setup参数细讲!computed计算属性和watch监听属性

      • setup细讲!
        • setup参数,steup(props,context)
          • 参数1.props,负责接收父组件传过来的值
          • 参数2.context
            • context.attrs
            • context.emit
            • context.slots, 插槽
        • Vue2的 props
      • computed计算属性
        • Vue3写法
          • 简便写法,修改计算属性的值会报错
          • 完整写法,可以修改计算属性
      • watch监听属性
        • Vue3写法
          • 监视ref所定义的一个响应式数据,不用加.value,一但加上,监听的就是reactive
          • 监视ref所定义的多个响应式数据
          • 监视reactive所定义的一个响应式数据的全部属性,发现此处无法正确监听oldvalue
          • 监视reactive所定义的一个响应式数据中的某个属性(错误写法和正确写法)
          • 监视reactive所定义的一个响应式数据中的多个基本类似属性
          • 监视reactive所定义的一个响应式数据中的对象中的某个属性时候,就得加上deep,此时deep有效
        • WatchEffec函数

setup细讲!

  • step执行的时机,在beforeCreate之前执行一次,this是没有的,是undetined
    在这里插入图片描述在这里插入图片描述

setup参数,steup(props,context)

参数1.props,负责接收父组件传过来的值
  • 如果不拿props声明,则打印的props为空
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
参数2.context
  • 先看一下打印的context
  • 在这里插入图片描述在这里插入图片描述
context.attrs
  • 1,当不拿props声明父组件传过来的参数,则打印的props为空,但是context.attrs中就会有这个参数
    在这里插入图片描述
context.emit
  • 当父组件上点击子组件,想触发子传父,需要用到context.emit(‘父组件的事件名’,传的参数)
  • 父组件上
    在这里插入图片描述
  • 子组件上
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
context.slots, 插槽
  • 子组件打印一下,红色圈住的代表有值,
setup(props, context) {
    console.log(context.slots); //相当于Vue2中的$attrs
    return {
    };
  },

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 子组件上使用
 <slot name='chacao'></slot>

Vue2的 props

  • 当父组件传值
<childer :msg='msg' :name='name'></childer>
  • 当子组件接收,接收的值在VC上,$attrs上就没有了
props:['msg','name']
  • 当子组件不接收,接收的值在$attrs上

computed计算属性

  • Vue3中也能直接用,但不介意直接用
  • 直接用写法:
    在这里插入图片描述

Vue3写法

  • 先引入
简便写法,修改计算属性的值会报错
import { reactive,computed} from 'vue';

在这里插入图片描述

完整写法,可以修改计算属性
<template>
  <!-- VUE3组件中的模板结构可以没有根标签 -->
  <view><input type="text" v-model="parems.name" /></view><br /><br />
  <view><input type="text" v-model="parems.lastname" /></view>
  <div class="fullname">全名: {{ parems.fullname }}</div>
  <div class="fullname">全名修改:<input type="text" v-model="parems.fullname" name="" id=""></div>

</template>

<script>
import { reactive, computed } from "vue";
export default {
  name: "Demo",
  setup(props, context) {
    let parems = reactive({
      name: "乞力马扎",
      lastname: "罗",
    });
    // 计算属性-简写,没有考虑计算属性被修改的情况
    // parems.fullname = computed(() => {
    //   return parems.name +'-'+ parems.lastname;
    // });
    //计算属性,考虑读写情况
    parems.fullname = computed({
      get(){
        return parems.name +'-'+ parems.lastname;
      },
      set(value){
        const newname=value.split('-')
        parems.name=newname[0]
        parems.lastname=newname[1]
      }
    });
    return {
      parems,
    };
  },
};
</script>

<style>
</style>

watch监听属性

  • Vue2写法
  • 简便写法
   //简单写法
    sum(newvalue, oldvalue) {
      console.log(newvalue, oldvalue);
    },
  • 复杂写法
 sum:{
      immediate:true,//上来立即监听一次
      deep:true,//深度监听
      handler(newvalue, oldvalue){
        console.log(newvalue, oldvalue);
      },
    }

Vue3写法

  • 监视reactive所定义的多个响应式数据,发现此处无法正确监听oldvalue
  • Vue3的监听reactive的响应式数据会强制开启深度监听(deep配置无效)
  • 监视reactive所定义的一个响应式数据中的对象中的某个属性时候,就得加上deep,此时deep有效
监视ref所定义的一个响应式数据,不用加.value,一但加上,监听的就是reactive
<script>
import { reactive, watch, ref } from "vue";
export default {
  name: "Demo",
  setup(props, context) {
    let sum =ref(0)
    let parems = reactive({
      name: "乞力马扎",
      lastname: "罗",
      sum: 0,
      job:{
        a:1,
        b:2
      }
    });
    watch(sum,(newvalue,oldvalue)=>{
      console.log(newvalue,oldvalue)
    })
    return {
      sum,
      parems,
    };
  },
};
</script>
监视ref所定义的多个响应式数据
<script>
import { reactive, watch, ref } from "vue";
export default {
  name: "Demo",
  setup(props, context) {
    let sum =ref(0)
    let sum2 =ref(0)

    let parems = reactive({
      name: "乞力马扎",
      lastname: "罗",
      sum: 0,
    });
    watch([sum,sum2],(newvalue,oldvalue)=>{//参数1数组监视的谁,参数2,监视的方法回调,参数3监视的对象配置
      console.log(newvalue,oldvalue)
    },{immediate:true})
    return {
      sum,
      sum2,
      parems,
    };
  },
};
</script>

在这里插入图片描述

监视reactive所定义的一个响应式数据的全部属性,发现此处无法正确监听oldvalue
<script>
import { reactive, watch, ref } from "vue";
export default {
  name: "Demo",
  setup(props, context) {
    let sum =ref(0)
    let sum2 =ref(0)

    let parems = reactive({
      name: "乞力马扎",
      lastname: "罗",
      sum: 0,
    });
    //监视reactive所定义的多个响应式数据,发现此处无法正确监听oldvalue
    watch(parems,(newvalue,oldvalue)=>{
       console.log(newvalue,oldvalue)
    })
    return {
      sum,
      sum2,
      parems,
    };
  },
};
</script>

在这里插入图片描述
在这里插入图片描述

监视reactive所定义的一个响应式数据中的某个属性(错误写法和正确写法)

在这里插入图片描述
在这里插入图片描述

监视reactive所定义的一个响应式数据中的多个基本类似属性

在这里插入图片描述

监视reactive所定义的一个响应式数据中的对象中的某个属性时候,就得加上deep,此时deep有效

在这里插入图片描述
在这里插入图片描述

WatchEffec函数

  • Watch:既要指明监听的属性,也要指明监视的回调
  • WatchEffec:不用指明监视的哪个属性,监视的回调中用到哪个属性,那就监视哪个属性,类似ref定义的,就是.value使用
  • 类似computed计算属性:,但是computed必须得有返回值return,WatchEffec则不需要返回值
<template>
  <!-- VUE3组件中的模板结构可以没有根标签 -->
  <view><input type="text" v-model="parems.name" /></view><br /><br />
  <view><input type="text" v-model="parems.lastname" /></view>
  <view>{{ sum }}</view>
  <button @click="sum++">sum++</button>
</template>

<script>
import { reactive, watch, ref, watchEffect } from "vue";
export default {
  name: "Demo",
  setup(props, context) {
    let sum = ref(0);
    let parems = reactive({
      name: "乞力马扎",
      lastname: "罗",
      sum: 0,
      job: {
        a: 1,
        b: 2,
      },
    });
    //监听
    watch(
      parems,
      (newvalue, oldvalue) => {
        console.log(newvalue, oldvalue);
      },
      { deep: true }
    );
    //监视
    watchEffect(() => {
      console.log("执行");
      const name = sum.value
    });
    return {
      sum,
      parems,
    };
  },
};
</script>

<style>
</style>

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

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

相关文章

MySQL(六)主从复制

MySQL系列文章 MySQL&#xff08;一&#xff09;基本架构、SQL语句操作、试图 MySQL&#xff08;二&#xff09;索引原理以及优化 MySQL&#xff08;三&#xff09;SQL优化、Buffer pool、Change buffer MySQL&#xff08;四&#xff09;事务原理及分析 MySQL&#xff08;五&a…

MySQL(详细)

目录 什么是数据库? 数据库操作 表操作 数据库约束 表的设计 聚合查询 分组查询 联合查询 (多表查询) 索引 事务 JDBC 什么是数据库? 数据库是一类软件 , 它是用来组织、保存、管理数据的.组织这些数据也是为了后续进行增删查改. MySQL 是一款开源免费的数据库. …

牛客网OR36 链表的回文结构

题目 对于一个链表&#xff0c;请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法&#xff0c;判断其是否为回文结构。 给定一个链表的头指针head&#xff0c;请返回一个bool值&#xff0c;代表其是否为回文结构。保证链表长度小于等于900。 链接&#xff1a;链表的回文结…

6.Java 修饰符

修饰符 &#xff08;访问修饰符、非访问修饰符&#xff09; 访问控制修饰符 Java中&#xff0c;可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。 default (即默认&#xff0c;什么也不写&#xff09;: 在同一包内可见&#xff…

前端|CSS(二)| pink老师

参考视频&#xff1a;黑马程序员前端CSS3基础教程&#xff0c;前端必备基础 目录 &#x1f4da;CSS 布局的三种机制 &#x1f407;普通流 &#x1f407;浮动 ⭐️浮动介绍 ⭐️浮动(float)的应用 ⭐️浮动(float)的扩展 ⭐️清除浮动 &#x1f407;定位 ⭐️定位 ⭐️…

检测到目标Referrer-Policy响应头缺失

详细描述 Web 服务器对于 HTTP 请求的响应头中缺少 Referrer-Policy&#xff0c;这将导致浏览器提供的安全特性失效。 当用户在浏览器上点击一个链接时&#xff0c;会产生一个 HTTP 请求&#xff0c;用于获取新的页面内容&#xff0c;而在该请求的报头中&#xff0c;会包含一个…

sparkSQL UDF

sparksql只能创建UDF&#xff0c;使用 SparkSession.udf.register() def num_count(num):return num*10#自定义方法名&#xff0c;调用的函数(包含逻辑)&#xff0c;返回值 udf2 spark.udf.register("udf1",num_count,IntegerType())#第二个参数是udf的处理逻辑&am…

Spring Security 构建基于 JWT 的登录认证

一言以蔽之&#xff0c;JWT 可以携带非敏感信息&#xff0c;并具有不可篡改性。可以通过验证是否被篡改&#xff0c;以及读取信息内容&#xff0c;完成网络认证的三个问题&#xff1a;“你是谁”、“你有哪些权限”、“是不是冒充的”。 为了安全&#xff0c;使用它需要采用 …

全网最完整,接口测试总结彻底打通接口自动化大门,看这篇就够了......

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试 前言 所谓接口&#xff0c;是指同一个系统中模块与模块间的数据传递…

高数笔记4(第一章函数 极限 连续-极限的计算2)

目录 概述&#xff08;5&#xff09;利用夹逼准则求极限&#xff08;后面几个方法一般用来求数列极限&#xff09;例66例68&#xff08;结论&#xff0c;需要记住&#xff09;例69&#xff08;上题的运用&#xff0c;需要数形结合&#xff0c;找出各个区间最大的&#xff09;例…

栈和队列详解

目录 一&#xff0c;栈的概念及其结构 二&#xff0c;栈的方法及其实现 2.1 栈 2.2 push(int val) - 进栈 2.3 pop() - 出栈 2.4 peek() - 得到栈顶元素 2.5 size() - 栈的大小 2.6 empty() 2.7 isFull() 三&#xff0c;队列的概念及其结构 四&#xff0c;队列的方法及…

面试题之MySQL事物的特性和锁

在关系性数据库管理系统配置&#xff0c;一个逻辑工作要成为事物&#xff0c;必须要满足4个特性&#xff0c;即所谓的ACID:原子性(Atomicity),一致性(Consistency)、隔离性(lsolation)和持久性(Durability)。 原子性: 原子性:事物作为一个整体被执行&#xff0c;包含在其中对…

Maven安装步骤

Maven官网下载安装包&#xff1a; https://maven.apache.org/download.cgi Maven下载官网 解压安装包 在环境变量中配置 MAVEN_HOME 和 Path 打开cmd&#xff0c;输入mvn -v查看安装成功

用Inno Setup6.2.1对Pyinstaller打包的python可执行文件exe做代码签名,签名工具用微软件SignTool

说明&#xff1a;使用本博文的前提条件是&#xff0c;你已经将代码打包成可执行文件exe&#xff0c;现在是用Inno Setup6.2.1做安装包&#xff0c;以及给exe、及安装包exe、卸载exe做代码签名 一、准备工具 1、下载 下载 https://visualstudio.microsoft.com/zh-hans/visual-…

简单扫码登录原理分析与本地测试

前言 参考&#xff1a;https://www.cnblogs.com/johnlearning/p/16205875.html 前言&#xff1a;简单分析扫码登录流程。 场景&#xff1a;以网页版微信为例&#xff0c;我们在 PC 端点击二维码登录后&#xff0c;浏览器页面会弹出二维码图片&#xff0c;此时打开手机微信扫…

本地存储之indexedDB的操作api -- localforage的使用

文章目录 概述增删改查操作工具类封装前端api前端关键接口调用&#xff08;以年度举例&#xff0c;其他维度类似&#xff09;列表获取添加内容修改内容 概述 本地存储有好几种&#xff0c;每种的优缺点本文就不赘述了&#xff0c;一搜一大堆。 本文只介绍indexedDB的使用。 能…

Redis实现分页+多条件模糊查询组合方案

导言 Redis是一个高效的内存数据库&#xff0c;它支持包括String、List、Set、SortedSet和Hash等数据类型的存储&#xff0c;在Redis中通常根据数据的key查询其value值&#xff0c;Redis没有模糊条件查询&#xff0c;在面对一些需要分页、排序以及条件查询的场景时(如评论&…

spring boot 集成dubbo

本demo使用spring boot 2.4.1版本集成 dubbo 2.7.15 1.创建maven项目及其子模块 父工程pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.ap…

个人微信开发API,微信机器人开发

安卓微信的api&#xff0c;个人微信开发API协议&#xff0c;微信 ipad &#xff0c;微信ipad协议&#xff0c;微信web版接口api&#xff0c;微信网页版接口&#xff0c;微信开发sdk&#xff0c;微信开发API&#xff0c;微信协议&#xff0c;微信接口文档&#xff0c;网页个人微…

不清晰的照片怎么变清晰?这几个方法轻松处理!

大家都会碰到老旧照片放大后变得模糊不清的情况&#xff0c;可惜我们无法在网上下载原图&#xff0c;这是我们自己的照片。那有没有简便的方法修复模糊照片呢&#xff1f;很多人会提到使用PS&#xff0c;但操作复杂需要基本技能。除了PS&#xff0c;还有其他方法修复模糊照片。…