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

这篇具有很好参考价值的文章主要介绍了Vue3 第三节 计算属性,监视属性,生命周期。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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 第三节 计算属性,监视属性,生命周期,vue.js,前端

① 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文章来源地址https://www.toymoban.com/news/detail-631945.html

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
    }
    // 
  }

到了这里,关于Vue3 第三节 计算属性,监视属性,生命周期的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue入门三(表单控制|购物车案例|v-model进阶|与后端交互|计算属性|监听属性|Vue生命周期)

    v-model双向数据绑定,还可以对输入框数据进行一定的限定。 v-modle 释义 lazy 等待input框的数据绑定时区焦点之后再变化 number 以数字开头并只保留后面的数字,不保留字母;字母开头都保留 trim 去除首位的空格 与后端交互统一使用json编码格式 与后端交互涉及到跨域问题后,

    2024年01月21日
    浏览(40)
  • 计算属性和监听属性,生命周期钩子,组件介绍

    # 计算属性是基于它们的依赖进行缓存的 # 计算属性只有在它的相关依赖发生改变时才会重新求值 # 计算属性就像Python中的property,可以把方法/函数伪装成属性 # 计算属性必须要有返回值 基本使用 首字母变大写 通过计算属性,重写过滤案例 只要属性发生变化,就会执行 函数

    2024年01月21日
    浏览(37)
  • Vue3监视属性watch详解(附带详细代码与讲解!!!)

    watch() 默认是懒侦听的,即仅在侦听源发生变化时才执行回调函数。 第一个参数是侦听器的 源 。这个来源可以是以下几种: 一个函数, 一个返回值 一个ref 一个响应式对象(reactive定义的) ...或是由以上类型的值组成的数组 第二个参数是一个回调函数, 这个回调函数可接收三个

    2024年02月11日
    浏览(28)
  • Vue--》计算属性与监视(侦听)属性的使用

    目录 计算属性(computed) 监视属性(watch) 监视的两种方法 immediate选项 深度监视/

    2024年02月02日
    浏览(32)
  • Vue核心基础3:计算属性和监视属性

    这边以姓名案例,来介绍计算属性 计算属性主要依靠它的返回值   这边以天气案例,来介绍监视属性  

    2024年02月20日
    浏览(26)
  • Vue3的props需要注意的地方(简写与监视属性)

    在工作中踩了props的坑,总结一下: 1.props是可以在模板语法中简写的。就好比,toRefs了一下state。我们没必要在模板语法中加上props.xxx; 2.有时我们需要监视props的内容,可以用到监视属性watch。我们可以先复习一下watch在Vue3的用法: 具体也可以见一下这篇博客:Vue3中watch的

    2024年02月07日
    浏览(29)
  • vue3生命周期

    vue3也提供了Composition API形式的生命周期钩子,与vue2.x中钩子对应关系如下: beforeCreate = setup() created = setup() beforeMount =onBeforeMount mounted onMounted beforeUpdate onBeforeUpdate updated onUpdated beforeUnmount onBeforeUnmount unmounted ===onUnmounted HomeView.vue App.vue 结果:

    2024年02月12日
    浏览(32)
  • vue3-生命周期

    生命周期 vue 组件实例都有自己的一个生命周期 从创建-初始化数据-编译模版-挂载实例到 DOM-数据变更后更新 DOM -卸载组件 生命周期简单说就是 vue 实例从创建到销毁的过程 生命周期钩子 在各个周期运行时,会执行钩子函数,让开发者有机会在特定阶段运行自己的代码。这就

    2024年01月25日
    浏览(39)
  • Vue3 的生命周期

    1、初始化阶段: 【1】beforeCreate == setup() data挂载之前 【2】created == setup() data挂载了,但是写的模板语法没有渲染到页面上 【3】beforeMount == onBeforeMount 挂载了,但是页面没有渲染 【4】mounted == onMounted 页面渲染结束 --------------------------------------全部Vue初始化完成了 ------------

    2024年02月09日
    浏览(37)
  • vue3的生命周期

    vue3中的选项式生命周期钩子基本与vue2中的大体相同,它们都是定义在 vue实例的对象参数中的函数,它们在vue中实例的生命周期的不同阶段被调用。生命周期函数钩子会在我们的实例 挂载,更新,卸载等过程中被调用的函数 以下是vue3中的主要选项式生命周期函数钩子: be

    2024年02月09日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包