Vue3 第三节 计算属性,监视属性,生命周期

news2024/11/29 4:50:07

1.computed计算属性

2.watch监视函数

3.watchEffect函数

4.Vue的生命周期函数

一.computed计算属性

  • 计算属性简写和完整写法
<template>
  <h1>一个人的信息</h1>
  姓:<input type="text" v-model="person.firstName" /><br />
  名:<input type="text" v-model="person.lastName" />
  <span>全名:{{ person.fullName }}</span>
  <br />
  全名:<input type="text" v-model="person.fullName" />
</template>

<script>
import { reactive, computed } from 'vue'
export default {
  name: 'Demo',
  // 数据
  setup () {
    let person = reactive({
      firstName: '陈',
      lastName: '玉'
    })
    // 简写
    person.fullName = computed(() => {
      return person.firstName + '-' + person.lastName
    })

    //计算属性 -- 完整写法
    person.fullName = computed({
      get () {
        return person.firstName + '-' + person.lastName
      },
      set (value) {
        const name = value.split('-')
        person.firstName = name[0]
        person.lastName = name[1]
      }
    })

    return {
      person
    }
  }
}
</script>

<style>
</style>

二.watch监视函数 

2.1 监视情况分类

 情况① 监视ref定义的响应式数据: 第一个参数是监视的数据,第二个参数是一个回调函数

immediate:一上来就执行,放到第三个参数中

watch(sum, (newValue, oldValue) => {
      console.log('sum的值变了', newValue, oldValue)
    }, { immediate: true })

情况② 监视多个ref定义的响应式数据

watch([sum, msg], (newValue, oldValue) => {
      console.log('sum或者msg的值变了', newValue, oldValue)
    }, { immediate: true })

情况③ 监视reactive所定义的全部属性

注意:

  • 此处无法正确的获取oldValue 

  • 强制开启了深度监视,deep属性设置为false无效

    watch(person, (newValue, oldValue) => {
      console.log('person的值变化了')
    }, { deep: false })

情况④ 监视reactive所定义的响应式数据中的某一个属性

    watch(() => person.age, (newValue, oldValue) => {
      console.log('person的值变化了', newValue, oldValue)
    })

情况⑤ 监视reactive所定义的响应式数据中的某些属性

    watch([() => person.name, () => person.age], (newValue, oldValue) => {
      console.log('person的值变化了', newValue, oldValue)
    })

情况⑥ 监视的是 reactive 定义对象中的某个属性,deep是有效的

    watch(() => person.job, (newValue, oldValue) => {
      console.log('person的值变化了', newValue, oldValue)
    }, { deep: true })

watch监视整个代码

<template>
  <h2>当前求和为:{{ sum }}</h2>
  <button @click="sum++">点我+1</button>
  <hr />
  <h2>当前的信息为:{{ msg }}</h2>
  <button @click="msg += '!'">修改信息</button>
  <hr />
  <h2>姓名:{{ person.name }}</h2>
  <h2>年龄:{{ person.age }}</h2>
  <h2>薪资:{{ person.job.j1.salary }}</h2>
  <button @click="person.name += '~'">修改姓名</button>
  <button @click="person.age++">增长年龄</button>
  <button @click="person.job.j1.salary++">涨薪</button>
</template>
<script>
import { reactive, ref, watch } from 'vue'
export default {
  name: 'Demo',
  // 数据
  setup () {
    let sum = ref(0)
    let msg = ref('你好')
    let person = reactive({
      name: '张三',
      age: 18,
      job: {
        j1: {
          salary: 20
        }
      }
    })
    // 情况1 监视ref定义的响应式数据
    // watch(sum, (newValue, oldValue) => {
    //   console.log('sum的值变了', newValue, oldValue)
    // }, { immediate: true })

    // 情况2 监视ref定义的响应式数据
    // watch([sum, msg], (newValue, oldValue) => {
    //   console.log('sum或者msg的值变了', newValue, oldValue)
    // }, { immediate: true })

    // 情况3  监视reactive所定义的全部属性
    // 1.注意:此处无法正确的获取oldValue
    // 2.注意:强制开启了深度监视(deep属性设置为false无效)
    watch(person, (newValue, oldValue) => {
      console.log('person的值变化了')
    }, { deep: false })


    // 情况四:监视reactive所定义的响应式数据中的某一个属性
    // watch(() => person.age, (newValue, oldValue) => {
    //   console.log('person的值变化了', newValue, oldValue)
    // })


    // 情况5:监视reactive所定义的响应式数据中的某些属性
    // watch([() => person.name, () => person.age], (newValue, oldValue) => {
    //   console.log('person的值变化了', newValue, oldValue)
    // })

    // 情况6(特殊):监视的是 reactive 定义对象中的某个属性,deep是有效的 
    // watch(() => person.job, (newValue, oldValue) => {
    //   console.log('person的值变化了', newValue, oldValue)
    // }, { deep: true })


    return {
      sum,
      msg,
      person
    }
  }
}
</script>

<style>
</style>

2.2 监视ref参数数据时需要注意的问题

① 监视ref基本数据类型的时候不需要加value

 let sum = ref(0)
    let msg = ref('你好')
    let person = ref({
      name: '张三',
      age: 18,
      job: {
        j1: {
          salary: 20
        }
      }
    })
    watch(sum, (newValue, oldValue) => {
      console.log('sum被修改了', newValue, oldValue)
    })

② 监视ref修饰的对象类型的时候,需要加value(相当于监视的是ref生成的reactive对象)

    watch(person.value, (newValue, oldValue) => {
      console.log('person被修改了', newValue, oldValue)
    })

如果不写.value,就加深度监视

watch(person, (newValue, oldValue) => {
      console.log('person被修改了', newValue, oldValue)
    }, { deep: true })

三.watchEffect函数

  • watch函数既要指明监视的属性,也要指明监视的回调
  • watchEffect函数不需要指明哪个属性,监视的回调中用到哪个属性,就监视哪个属性
  • watchEffect函数所指定的回调中的数据只要发生变化,则直接重新执行回调
  • watchEffect 有点像computed,但是computed注重计算出来的值,所以必须要写返回值
  • watchEffect更注重的是过程,所以不用写返回值
 watchEffect(() => {
      const x1 = sum.value
      const x2 = person.job.j1.salary
      console.log('watchEffect所指定的回调执行了')
    })

四.Vue3 的生命周期函数

① Vue3.0中可以继续使用Vue2.X中的生命周期钩子,但是有两个被更名

  • beforeDestroy改名为beforeUnmount
  • destroyed改为unmounted

② Vue3.0可以通过配置项的形式使用生命周期钩子

  beforeCreate () {
    console.log('---beforeCreate---')
  },
  created () {
    console.log('---created---')
  },
  beforeMount () {
    console.log('---beforeMount---')
  },
  mounted () {
    console.log('----mounted---')
  },
  beforeUpdate () {
    console.log('---beforeUpdate---')
  },
  updated () {
    console.log('---updated---')
  },
  beforeUnmount () {
    console.log('---beforeUnmount---')
  },
  unmounted () {
    console.log('---unmounted---')
  }

③ Vue3.0提供了组合式API形式的生命周期钩子,与Vue2.x中钩子的对应关系如下

  • beforecreate    =>     setup()
  • created =>  setup()
  • beforeMount =>  onBeforeMount

  • mounted => onMounted

  • beforeUpdate => onBeforeUpdate

  • updated => onUpdated

  • beforeUnmount => onBeforeUnmount

  • unmounted => onUnmounted

import { ref, onBeforeMount, onMounted, onBeforeUpdate, onUpdated, onBeforeUnmount, onUnmounted } from 'vue'
export default {
  name: 'Demo',
  // 数据
  setup () {
    let sum = ref(0)
    onBeforeMount(() => {
      console.log('---onBeforeMount---')
    })
    onMounted(() => {
      console.log('---onMounted---')
    })
    onBeforeUpdate(() => {
      console.log('---onBeforeUpdate---')
    })
    onUpdated(() => {
      console.log('---onUpdated---')
    })
    onBeforeUnmount(() => {
      console.log('---onBeforeUnmount---')
    })

    onUnmounted(() => {
      console.log('---onUnmounted---')
    })

    return {
      sum
    }
    // 
  }

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

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

相关文章

车载A2B总线AD2428主从模式调试问题汇总

一&#xff0c;简介 在实际A2B总线一主一从模式的调试过程中下载程序出现许多报错提示&#xff0c;本文将遇到的错误进行汇总记录&#xff0c;方便相关开发者进行参考。 二&#xff0c;错误现象 2.1 Cable Terminal Shorted to Ground 主机IIS&#xff08;TDM&#xff09;线…

Mir 2.14 正式发布,Ubuntu 使用的 Linux 显示服务器

Canonical 公司最近发布了 Mir 2.14&#xff0c;这是该项目的最新版本。 Mir 2.14 在 Wayland 方面通过 ext-session-lock-v1 协议增加了对屏幕锁定器 (screen lockers) 的支持&#xff0c;并最终支持 Wayland 拖放。此外还整合了渲染平台的实现&#xff0c;放弃了之前在 Raspb…

常见监控网络链路和网络设备的方法

网络监控主要包括网络链路监控和网络设备监控&#xff0c;通常系统运维人员会比较关注。 一、网络链路监控 网络链路监控主要包含三个部分&#xff0c;网络连通性、网络质量、网络流量。 连通性和质量的监控手段非常简单&#xff0c;就是在链路一侧部署探针&#xff0c;去探…

搭建 elasticsearch8.8.2 伪集群 windows

下载windows 版本 elasticsearch8.8.2 以下链接为es 历史版本下载地址&#xff1a; Past Releases of Elastic Stack Software | Elastic windows 单节点建立方案&#xff1a; 下载安装包 elasticsearch-8.8.2-windows-x86_64.zip https://artifacts.elastic.co/download…

设计模式原来是这样

目录 概述: 什么是模式&#xff01;&#xff01; 为什么学习模式&#xff01;&#xff01; 模式和框架的比较&#xff1a; 设计模式研究的历史 关于pattern的历史 Gang of Four(GoF) 关于”Design”Pattern” 重提&#xff1a;指导模式设计的三个概念 1.重用(reuse)…

Linux:shell脚本:基础使用(2)

test命令 格式1&#xff1a;test 条件表达式 格式2&#xff1a;[ 条件表达式 ] (前后至少应有一个空格) 常用的测试操作符 -d&#xff1a;测试是否为目录&#xff08;Directory) -e&#xff1a;测试目录或文件是否存在&#xff08;Exist&#xff09; -f&#xff1a;测试是否…

【C++】Lambda表达式的使用

学习目标&#xff1a; 例如&#xff1a; 了解Lambda的优点 掌握Lambda表达式的使用 了解Lambda表达式的底层原理 学习内容&#xff1a; Lambda表达式的语法 文章目录 学习目标&#xff1a;学习内容&#xff1a;Lambda表达式排序案例Lambda表达式语法捕捉列表Lambda表达式模拟…

20230806将ASF格式的视频转换为MP4

20230806将ASF格式的视频转换为MP4 2023/8/6 18:47 缘起&#xff0c;自考中山大学的《计算机网络》&#xff0c;考试《数据库系统原理》的时候找到视频&#xff0c;由于个人的原因&#xff0c;使用字幕更加有学习效率&#xff01; 由于【重型】的PR2023占用资源较多&#xff0c…

laravel语言包问题

1、更新vendor composer require "overtrue/laravel-lang:3.0" 2、修正配置文件 config/app.php 3、 php artisan config:clear 更新缓存 4、设定新的语言包 在这个resources\lang目录下加即可

海康威视摄像头配置RTSP协议访问、onvif协议接入、二次开发SDK接入

一、准备工作 (1)拿到摄像头之后,将摄像头电源线插好,再将网线插入到路由器上。 (2)将自己的笔记本电脑也连接到路由器网络,与摄像头出在同一个局域网。 二、配置摄像头 2.1 激活方式选择 第一次使用设备需要激活,在进行配置。 最简单,最方便的方式是选择浏览器激…

【嵌入式环境下linux内核及驱动学习笔记-(18)LCD驱动框架1-LCD控制原理】

目录 1、LCD显示系统介绍1.1 LCD显示基本原理1.1.1 颜色的显示原理&#xff1a;1.1.2 图像的构成 1.2 LCD接口介绍1.2.1 驱动接口 - MCU接口1.2.2 驱动接口 - RGB接口1.2.3 驱动接口 - LVDS接口1.2.4 驱动接口 - MIPI接口1.2.5 RGB / MIPI / LVDS三种接口方式的区别&#xff1a…

【数据结构OJ题】轮转数组

原题链接&#xff1a;https://leetcode.cn/problems/rotate-array/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 1. 方法一&#xff1a;暴力求解&#xff0c;将数组的第一个元素用临时变量tmp存起来&#xff0c;再将数组其他元素往右挪动一步&…

分享kubernetes部署:基于Ansible自动安装kubernetes

基于Ansible自动安装kubernetes 环境准备 我们以如下机器环境为例&#xff1a; 开放端口&#xff1a; 控制平面节点 工作节点 请按如上中规定的开放端口&#xff0c;或关闭防火墙&#xff1a; systemctlstopfirewalld&&\ systemctldisablefirewalld 安装常用工具 sudo…

【UE4】多人联机教程(重点笔记)

效果 1. 创建房间、搜索房间功能 2. 根据指定IP和端口加入游戏 步骤 1. 新建一个第三人称角色模板工程 2. 创建一个空白关卡&#xff0c;这里命名为“InitMap” 3. 新建一个控件蓝图&#xff0c;这里命名为“UMG_ConnectMenu” 在关卡蓝图中显示该控件蓝图 打开“UMG_Connec…

JavaScript学习(3)

Web API 是开发人员的梦想。 它可以扩展浏览器的功能它可以极大简化复杂的功能它可以为复杂的代码提供简单的语法 什么是 Web API&#xff1f; API 指的是应用程序编程接口&#xff08;Application Programming Interface&#xff09;。 Web API 是 Web 的应用程序编程接口…

java异常机制分析

java异常机制分析 本文实例分析了java的异常机制&#xff0c;分享给大家供大家参考。相信有助于大家提高大家Java程序异常处理能力。具体分析如下&#xff1a; 众所周知&#xff0c;java中的异常(Exception)机制很重要&#xff0c;程序难免会出错&#xff0c;异常机制可以捕获…

为生成式人工智能制作即时三明治

作者&#xff1a;Andrew Macri, Garrett Spong 当多次询问同一问题时&#xff0c;大型语言模型 (LLM) 可能会给出不一致的答案。 例如&#xff0c;如果你请求帮助编写 Elasticsearch 查询&#xff0c;有时生成的查询可能会被 API 调用包装&#xff0c;即使我们没有请求它。 当将…

Mybatis-plus动态条件查询QueryWrapper的使用

Mybatis-plus动态条件查询QueryWrapper的使用 一&#xff1a;queryWrapper介绍 queryWrapper是mybatis plus中实现查询的对象封装操作类&#xff0c;可以封装sql对象&#xff0c;包括where条件&#xff0c;order by排序&#xff0c;select哪些字段等等&#xff0c;他的层级关…

【C语言初阶】指针篇—下

目录 4. 指针运算4.1 指针-整数4.2 指针-指针4.3 指针的关系运算 5. 指针和数组6. 二级指针7. 指针数组 C语言初阶—指针上 点击跳转 4. 指针运算 指针 整数指针-指针指针的关系运算 4.1 指针整数 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h>int main() {in…

【VALSE2023】0610 胡瀚《视觉自监督学习年度进展评述》

from&#xff1a; https://www.bilibili.com/video/BV1J44y1w79r 文章目录 自监督学习年度进展技术进展趋势一&#xff1a;掩码图像建模的改进技术进展二&#xff1a;发现掩码图像建模对**大模型**比较友好技术进展三&#xff1a;针对**小模型**的掩码图像建模训练技术进展四&a…