浅析vue3响应式数据与watch属性

 更新时间:2022年05月24日 08:58:05   作者:鹏程933  
这篇文章主要介绍了vue3响应式数据与watch属性的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  1. 是Vue3的 composition API中2个最重要的响应式API
  2. ref用来处理基本类型数据, reactive用来处理对象(递归深度响应式)
  3. 如果用ref对象/数组, 内部会自动将对象/数组转换为reactive的代理对象
  4. ref内部: 通过给value属性添加getter/setter来实现对数据的劫持
  5. reactive内部: 通过使用Proxy来实现对对象内部所有数据的劫持, 并通过Reflect操作对象内部数据
  6. ref的数据操作: 在js中要.value, 在模板中不需要(内部解析模板时会自动添加.value)
<template>
  <div>ref与</div>
  <div>msg1:{{msg1}}</div>
  <div>msg2:{{msg2}}</div>
  <div>msg3:{{msg3}}</div>
  <button @click="updata">改变</button>
</template>

<script lang="ts">
import {reactive, ref} from "vue";
export default {
  setup(){
    const msg1=ref('hello')
    const msg2 = reactive({
      name: 'jack',
      wife: {
        name:'rose'
      }
    })
    const msg3 = ref({ // ref中如果是一个对象,那么经过了reactive处理,形成了Proxy对象
      name: 'jack',
      wife: {
        name: 'rose'
      }
    })
    function updata(){
      msg1.value += '++'
      msg2.wife.name += '++'
      msg3.value.wife.name += '++'
    }
    return {
      msg1,
      msg2,
      msg3,
      updata
    }
  }
}
</script>

计算属性与监视

computed函数:

  • 与computed配置功能一致
  • 有getter/setter

与watch配置功能一致

  • 监视指定的一个或多个响应式数据, 一旦数据变化, 就自动执行监视回调
  • 默认初始时不执行回调, 但可以通过配置immediate为true, 来指定初始时立即执行第一次
  • 通过配置deep为true, 来指定深度监视

watchEffect函数

  • 不用直接指定要监视的数据, 回调函数中使用的哪些响应式数据就监视哪些响应式数据
  • 默认初始时就会执行第一次, 从而可以收集需要监视的数据
  • 监视数据发生变化时回调
<template>
  <h1>计算属性与监视</h1>
  <fieldset>
    <legend>姓名操作</legend>
    姓氏:<input type="text" placeholder="输入姓氏" v-model="user.firstName"><br>
    名字:<input type="text" placeholder="输入名字" v-model="user.lastName">
  </fieldset>
  <fieldset>
    <legend>计算属性和监视</legend>
    姓名:<input type="text" placeholder="显示姓名" v-model="fullName1"><br>
    姓名:<input type="text" placeholder="显示姓名" v-model="fullName2"><br>
    姓名:<input type="text" placeholder="显示姓名" v-model="fullName3"><br>
  </fieldset>
</template>

<script lang="ts">
import {reactive, ref, computed, watch, watchEffect} from "vue";
export default {
  setup() {
    const user=reactive({
      firstName:'东方',
      lastName: '不败'
    })
    /*
    * Vue3中的计算属性
    * 计算属性如果只传入一个回调函数,那么表示get
    * 返回的是一个ref对象
    * */
    const fullName1=computed(()=>{
      return user.firstName + '-' + user.lastName
    })
    const fullName2=computed({
      get(){
        return user.firstName + '-' + user.lastName
      },
      set(val){
        const name=val.split('-')
        user.firstName=name[0]
        user.lastName=name[1]
      }
    })
    // 监视属性
    let fullName3=ref('')
    watch(user,({firstName,lastName})=>{ // user里面对象解构赋值
      fullName3.value=firstName + '-' +lastName
    },{immediate:true}) // immediate 开始时执行一次 还可以加deep 深度监视
    // watchEffect(()=>{
    //   fullName3.value=user.firstName + '-' +user.lastName
    // }) // 更智能,开始就自动执行一次

    /*
    * wathc可以监视多个属性,监听非响应式数据时,需要()=>
    * */
    watch([()=>user.firstName,()=>user.lastName],()=>{
      console.log("watch执行了")
    })
    return {
      user,
      fullName1,
      fullName2,
      fullName3
    }
  }
}
</script>

到此这篇关于vue3响应式数据与watch属性的文章就介绍到这了,更多相关vue3 watch属性内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用Vue3实现在浏览器端进行zip文件压缩

    使用Vue3实现在浏览器端进行zip文件压缩

    在前端开发中,我们时常需要处理文件上传和下载的功能,本文主要和大家分享一下如何使用Vue3和JSZip库在浏览器端实现zip文件压缩,需要的可以参考下
    2024-05-05
  • Vue动态生成表格的行和列

    Vue动态生成表格的行和列

    这篇文章主要为大家详细介绍了Vue动态生成表格的行和列,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • vue 使用el-table循环生成表格的过程

    vue 使用el-table循环生成表格的过程

    这篇文章主要介绍了vue 使用el-table循环生成表格的过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • bpmn-js在vue中的基本使用及操作功能

    bpmn-js在vue中的基本使用及操作功能

    这篇文章主要介绍了bpmn-js在vue中的基本使用及操作功能,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起看看吧
    2024-02-02
  • vue使用require.context实现动态注册路由

    vue使用require.context实现动态注册路由

    这篇文章主要介绍了vue使用require.context实现动态注册路由的方法,帮助大家更好的理解和使用vue框架,感兴趣的朋友可以了解下
    2020-12-12
  • 详解Vue 2中的  initState 状态初始化

    详解Vue 2中的  initState 状态初始化

    这篇文章主要介绍了详解Vue 2中的initState状态初始化,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • 在vue中import()语法不能传入变量的问题及解决

    在vue中import()语法不能传入变量的问题及解决

    这篇文章主要介绍了在vue中import()语法不能传入变量的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue中注册组件的两种方式详解(全局注册&& 局部注册)

    vue中注册组件的两种方式详解(全局注册&& 局部注册)

    vue 是一个完全支持组件化开发的框架, 组件之间可以进行相互的引用,这篇文章主要介绍了vue中注册组件的两种方式详解(全局注册&& 局部注册),需要的朋友可以参考下
    2023-06-06
  • el-tooltip根据条件控制显示的示例代码

    el-tooltip根据条件控制显示的示例代码

    这篇文章主要介绍了el-tooltip根据条件控制显示的示例代码,包括列表型和树状图型,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-12-12
  • element中使用formdata进行上传文件的方法

    element中使用formdata进行上传文件的方法

    本文主要介绍了elementUI中使用formdata进行上传文件的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03

最新评论