Vue3 setup的注意点及watch监视属性的六种情况分析

目录
  • 一,setup须知
    • 1.1setup的执行时间
    • 1.2.steup参数
  • 二,watch监视属性

一,setup须知

1.1setup的执行时间

1.setup的执行时间要比beforCreate执行要早

  export default {
    name: "Demo",
    beforeCreate(){
      console.log('beforeCreate已执行');
    },
    setup() {
      console.log('setup已执行');
      let person = reactive({
        name: "小明",
        age: 20,
      });
      return {
        person,
      };
    },
  };

1.2.steup参数

setup的参数
1.props: 值为对象,包含: 组件外部传递过来,且组件内部声明接收了的属性

2.context:上下文对象
①attrs:值为对象,包含: 组件外部传递过来,但没有在props配置中声明的属性,相当于 this.$attrs

  export default {
    name: "Demo",
    props:['msg','age'],
    setup(props) {
      console.log(props);
      let person = reactive({
        name: "小明",
        age: 20,
      });
      return {
        person,
      };
    },
  };

②slots: 收到的插槽内容,相当于 this.$slots

在App中定义插槽

<template v-slot:qwe>
<span>123</span>
</template>
<template v-slot:ewq>
<span>321</span>
</template>

在子组件中获取到插槽

 console.log(context.slots); // 得到插槽

③emit: 分发自定义事件的函数,相当于 this.$emit

在App中写一个自定义事件并且传给组件

<Demo @hi="Hello" msg="山鱼" age=10>
</Demo>
  setup() {
    function Hello(){
      console.log('你好!');
    }
    return {
      Hello
    }
  }

然后去到子组件使用context.comit获取到自定义事件

 function point(){
        context.emit('hi',666)
      }
5TgxPT2v-1681788304084)]

```js
 function point(){
        context.emit('hi',666)
      }     

与Vue2中的computed配置功能一致

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 arr = value.split('-')
          person.firstName = arr[0]
          person.lastName = arr[1]
        }
      })
      return {
        person,
      };
    },
  };

二,watch监视属性

有两种watch,分别是单个属性数据监视,和多个属性数据监视

watch中的三个参数分别为,监视的对象,监视的函数,监视属性的配置

监视ref所定义的数据

①监视属性监视ref的一个响应式的值

    watch(sum, (newvalue, oldvalue) => {
      console.log('当前值为'+newvalue, '以前值为'+oldvalue);
    });

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

        watch([sum,msg], (newvalue, oldvalue) => {
      console.log('当前值为'+newvalue, '以前值为'+oldvalue);
    });

监视reactive所定义的数据

①监视reactive定义的数据的变化

使用reactive定义的数据无法使用watch正确的获取newValue
并且会强制开启深度监视

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

②监视reactive所定义的响应式数据的某个属性

            watch(()=>person.name,(newValue,oldValue)=>{
               console.log('person.name发生了变化',newValue,oldValue)
           })

③监视reactive所定义的响应式数据的某些属性

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

④特殊形况

注:该情况监视的是recative所定义的对象中的某个属性,所以deep可以开启

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

到此这篇关于Vue3 setup的注意点及watch监视属性的六种情况分析的文章就介绍到这了,更多相关vue3 watch监视属性内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • vue3使用vuex实现页面实时更新数据实例教程(setup)

    目录 前言 1.项目引入vue 2.main.js引入vuex 3.新建store文件夹 3.在传输数据的页面引入vuex (api.js) 4.渲染页面 总结 前言 我项目中使用ws获取数据,因为数据是不断更新的,vue页面只更新一次就不更新了,然后暂时只能想到vuex来保存更新状态,页面监听数据实现实时更新.下面是我测试时用的数据,没有用ws,用的是定时器模拟定时发送数据. 1.项目引入vue npm i vuex 2.main.js引入vuex import { createApp } f

  • Vue3中watch监听对象的属性值(监听源必须是一个getter函数)

    目录 Vue3 中使用 watch 侦听对象中的具体属性 1.前言 2. 原因 3.watch源码分析 4.doWatch源码分析 5.总结 Vue3 中使用 watch 侦听对象中的具体属性 1.前言 <script lang="ts" setup> // 接受父组件传递的数据 const props = defineProps({ test: { type: String, default: '' } }) // 使用 watch 侦听 props 中的 test 属性

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

    是Vue3的 composition API中2个最重要的响应式API ref用来处理基本类型数据, reactive用来处理对象(递归深度响应式) 如果用ref对象/数组, 内部会自动将对象/数组转换为reactive的代理对象 ref内部: 通过给value属性添加getter/setter来实现对数据的劫持 reactive内部: 通过使用Proxy来实现对对象内部所有数据的劫持, 并通过Reflect操作对象内部数据 ref的数据操作: 在js中要.value, 在模板中不需要(内部解析

  • Vue3 setup添加name的方法步骤

    目录 Vue3中name有什么用呢? Vue3 定义 name 1.自动生成 2.在开启一个script用来定义name 3.使用第三方插件 unplugin-vue-define-options 4.个人想法 我想着直接在script 定义name 不好吗? Vue3 setup 支持 name 插件实现 思路借鉴上面插件 总结 Vue3中name有什么用呢? 1.在递归组件的时候需要定义name 2.配合keep-alive include exclude 可以缓存组件 3.在Vue有报错或

  • vue3 setup() 高级用法示例详解

    目录 一.选项式API 和 组合式API 区别 二.setup 具体怎么用? 2.1.setup 什么时候执行? 2.2.setup 数据和方法如何使用? 2.3.setup 内部有 this 吗? 2.5.setup与钩子函数关系 三.setup 参数 3.1.props 3.2.context 四.setup 特性总结 本篇文章干货较多,建议收藏! 从 vue2 升级到 vue3,vue3 是可以兼容 vue2 的,所以 vue3 可以采用 vue2 的选项式API.由于选项式API一个变量

  • 前端vue3 setup使用教程

    目录 1.简单使用 2.修改setup中的变量值 3.setup形式下的父子组件通信 3.1.父传子 3.2.子传父 3.2.1.子组件调用父组件方法 3.2.2.子组件向父组件传递数据 4.setup中使用生命周期函数 vue3 中新增了 setup,它的出现是为了解决组件内容庞大后,理解和维护组件变得困难的问题.即 vue 中 data.computed.methods.watch 等内容非常多以后,同一业务逻辑的 data 中的数据和 methods 中的方法在 vue 文件中“相隔甚远”

  • Vue3 - setup script的使用体验分享

    目录 前言 使用 导出变量&方法 使用组件 使用props - defineProps 使用emits - defineEmit 使用context - useContext 指令 总结 前言 Vue3已经发布很长一段时间了,相信大多数前端人都已经上手把玩过了,其中比较大的一个特性就是setup方法,可以让我们非常直观和方便的组合我们的业务逻辑和hooks.在setup里面返回的变量可以直接在template里面使用.大多数情况下,我们的大部分逻辑都集中在setup方法里面,所以官方提供了一个实

  • Vue3中使用setup通过ref获取子组件的属性

    目录 setup通过ref获取子组件的属性 调用子组件的属性和方法 setup通过ref获取子组件的属性 主要依赖defineExpose 子组件通过 defineExpose将数据抛出 <template>   <div class="test-com">testCom</div> </template> <script setup lang="ts"> import { ref } from 'vue'

  • vue3:setup语法糖使用教程

    目录 1.setup语法糖简介 2.setup语法糖中新增的api 2.1defineProps 2.2defineEmits 2.3defineExpose 补充:与普通的script一起使用 总结 1.setup语法糖简介 直接在script标签中添加setup属性就可以直接使用setup语法糖了. 使用setup语法糖后,不用写setup函数:组件只需要引入不需要注册:属性和方法也不需要再返回,可以直接在template模板中使用. <template> <my-component

  • vue3 setup中父组件通过Ref调用子组件的方法(实例代码)

    目录 在setup()钩子函数中调用 在<srcipt setup>中调用 在setup()钩子函数中调用 父组件 <template> <div> 我是父组件 <children ref="childrenRef" /> <button @click="handleChildren">触发子组件</button> </div> </template> <scrip

  • vue3 setup语法糖之组件传参(defineProps、defineEmits、defineExpose)示例详解

    vue3官方文档 defineProps 和 defineEmits 都是只能在 <script setup> 中使用的编译器宏.他们不需要导入,且会随着 <script setup> 的处理过程一同被编译掉. defineProps 接收与 props 选项相同的值,defineEmits 接收与 emits 选项相同的值. 父传子  - defineProps 父组件 <template> <div class="Father"> &

  • 基于Vue3.0开发轻量级手机端弹框组件V3Popup的场景分析

    之前有分享一个vue2.x移动端弹框组件,今天给大家带来的是Vue3实现自定义弹框组件. V3Popup 基于vue3.x实现的移动端弹出框组件,集合msg.alert.dialog.modal.actionSheet.toast等多种效果.支持20+种自定义参数配置,旨在通过极简的布局.精简的调用方式解决多样化的弹框场景. v3popup 在开发之初参考借鉴了Vant3.ElementPlus等组件化思想.并且功能效果和之前vue2.0保持一致. ◆ 快速引入 在main.js中全局引入v3p

  • Vue.js watch监视属性知识点总结

    这个属性用来监视某个数据的变化,并触发相应的回调函数执行 1.基本用法 (1)添加watch属性,值为一个对象.对象的属性名就是要监视的数据,属性值为回调函数,每当这个属性名对应的值发生变化,就会触发该回调函数执行 (2)回调函数有2个参数: newVal:数据发生改变后的值 oldVal:数据发生改变前的值 var vm = new Vue({ el:'#app', data: { name: '郭靖' }, watch: { name(newVal,oldVal){ console.log(

随机推荐