【Vue】Vue2.0+Vue3.0学习笔记day14(Vue3)

这篇博客详细记录了Vue3中的计算属性(computed)、watch的使用,包括监视ref和reactive数据的变化,以及watchEffect的特性。还探讨了Vue3的新生命周期,自定义hook的实现,以及toRef、toRefs、shallowReactive和shallowRef的使用场景和区别。
摘要由CSDN通过智能技术生成

目录

150.computed计算属性

151.watch监视ref定义的数据

152.watch监视reactive定义的数据

153.watch时value的问题

154.watchEffect函数

155.Vue3生命周期

156.自定义hook

157.toRef与toRefs

158.shallowReactive与shallowRef


150.computed计算属性

  • 与Vue2.x中computed配置功能一致

  • 写法

import {computed} from 'vue'

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

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

<script>
import { reactive } from '@vue/reactivity'
import { computed } from '@vue/runtime-core'

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 nameArr = value.split('-')
        person.firstName = nameArr[0]
        person.lastName = nameArr[1]
      }
    })

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

  }
}
</script>

151.watch监视ref定义的数据

  • 与Vue2.x中watch配置功能一致

  • 两个小“坑”:

    • 监视reactive定义的响应式数据时:oldValue无法正确获取、强制开启了深度监视(deep配置失效)。
    • 监视reactive定义的响应式数据中某个属性时:deep配置有效。

<template>
  <h2>当前求和为:{
  {sum}}</h2>
  <button @click="sum++">点我+1</button>
  <hr>
  <h2>当前的信息为: {
  {msg}}</h2>
  <button @click="msg+='!'">修改信息</button>
</template>

<script>
import { ref } from '@vue/reactivity'
import { watch } from '@vue/runtime-core'

export default {
  name: 'Demo',
  setup(){
    // 数据
    let sum =ref(0)
    let msg =ref('你好啊')

    // 情况一:监视ref所定义的一个响应式数据
   /*  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})

    // 返回一个对象(常用)
    return{
      sum,
      msg
    }

  }
}
</script>

152.watch监视reactive定义的数据

<template>
  <h2>当前求和为:{
  {sum}}</h2>
  <button @click&#
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值