首页 > 其他分享 >vue3 props 响应式测试,props使用,ref独立ts解构

vue3 props 响应式测试,props使用,ref独立ts解构

时间:2024-10-10 21:46:56浏览次数:1  
标签:abc console log props 解构 响应 vue3 outer

概论

  • vue3 的props是深度响应的,深度数据改变都能监听到,并改变模板
  • 3.2左右的版本解构props子对象不能响应式
  • 若遇到props子对象不能响应式监听,一般就是改变之前的数据和改变之后的数据没产生变化,所以没发生响应式

代码

  • 父组件
<template>
  <div class='box'>
    demo
    <child2 :abc="abc" :bol="bol" />

    <button @click="changeAbc">change abc</button>
  </div>
</template>
<script lang='ts' setup>
// import { ref, reactive, computed, onMounted, nextTick } from 'vue';
import child2 from './components/child2.vue';

const abc = ref<number>(1)

const bol = ref<boolean>(false)


console.log(abc, "abc")

console.log(bol, "bol")


function changeAbc() {
  abc.value += 1;
  bol.value = true;
}

</script>
<style lang='scss' scoped></style>
  • 子组件cihld2.vue
<template>
  <div class='box'>
    demo
    {{ bol }}
    <br>
    this is outer: {{ outer }}
    <button @click="changeOuter">change outer</button>
  </div>
</template>
<script lang='ts' setup>
import { ref, reactive, computed, onMounted, nextTick, PropType } from 'vue';

import { outer, changeOuter } from "../ts/test";

watch(outer, (val) => {
  console.log(val, "in watch changeOuter")
})

const props = defineProps({
  abc: {
    type: Number,
    default: 0,
  },
  bol: {
    type: Boolean,
    default: false,
  }
})
//若遇到props子对象不能响应式不能监听变化等,肯定是数据没产生变化导致的,比如依赖是false,修改后还是false就不能响应式
//prop的数据理论上是深度响应式的,子组件调用就能响应式
//watch 监听proxy子对象需要函数返回的方式,一级对象直接可以写变量
watch(() => props.bol, (val) => {
  console.log(val, "props.bol")
})
// 上面模板即使没用到,没调用也是还能watch监听,说明vue3的响应式是独立的,不依赖模板而响应式,可以更好的解构服用响应式数据
watch(() => props.abc, (val) => {
  console.log(val, "props.abc")
})

const cpu = computed(() => {
  return props.abc * 2
})

watch(cpu, (val) => {
  console.log(val, "valksfjldfjsdfjsdf")
})

//console.log(props,"propsslfjskdfjsd")

//console.log(props.abc,"propsslfjskdfjssdfdsf")
//console.log(props.bol,"propsslfjskdfjssdfboldsf")
</script>
<style lang='scss' scoped></style>
  • 独立的ts文件test.ts

//proxy 响应式可以解构到独立的js,外部引用依然可以响应式
export const outer = ref(9)



export function changeOuter() {
  outer.value += 1;
  console.log(outer.value, "outer") // 10
}

props子对象数据不响应式情况参考

https://blog.csdn.net/qq_66133937/article/details/133804671
image

标签:abc,console,log,props,解构,响应,vue3,outer
From: https://www.cnblogs.com/jocongmin/p/18457219

相关文章

  • 在Vue3中如何实现四种全局状态数据的统一管理?
    四种全局状态数据在实际开发当中,会遇到四种全局状态数据:异步数据(一般来自服务端)、同步数据。同步数据又分为三种:localstorage、cookie、内存。在传统的Vue3当中,分别采用不同的机制来处理这些状态数据,而在Zova中只需要采用统一的Model机制状态数据传统的Vue3Zova异......
  • vue3+ts中实现人脸识别拍照上传,要求自动人脸框固定居中,可自动拍照识别,也可手动拍照识
    效果图使用技术face-api.js,canvas1、npm安装face-api.jsnpminstallface-api.js2、下载face-api.js的models下载models放在\public\models目录3、创建face.vue组件<template> <divstyle="height:calc(100vh-140px);display:flex;justify-content:cente......
  • Vue3中Watch的同步和异步
    在Vue3中,watch是一个强大的工具,适合监视响应式数据的变化并处理副作用逻辑。最近在做CodeReview的时候,发现了一些对watch使用上不太合理的地方,整理了一个类似的例子。案例分析先来看看例子:<template>{{dataList}}</template><scriptsetuplang="ts">import{......
  • Vue3 封装不定高虚拟列表 hooks
    //useVirtualList.tsimport{ref,onMounted,onBeforeUnmount,watch,nextTick}from"vue";importtype{Ref}from"vue";interfaceConfig{data:Ref<any[]>;//数据源scrollContainer:string;//滚动容器的元素选择器actualHeightC......
  • 从零搭建Cesium+vue3+vite
    介绍在现代前端开发中,Cesium是一个功能强大的WebGL库,广泛应用于3D地球可视化、空间数据展示等领域。结合Vue3的组件化开发模式,我们可以创建一个高效且可维护的3D地图应用。本文将带你一步步搭建一个简单的Cesium+Vue3项目,并且对各个功能模块进行细致划分,帮助你快......
  • 基于Vue3+pinia+vue-router+axios+element-plus等开发的新闻发布管理系统
    新闻发布管理系统是一个基于Vue3+pinia+vue-router+axios+element-plus等开发的系统,主要功能包括:登录模块、注册模块、新闻分类管理模块、新闻管理模块、个人中心模块(包括基本资料、更换头像、重置密码功能)等。代码下载:源码下载基于Vue3开发的新闻发布管理系统,使用的前端......
  • 尚硅谷vue3实战项目--硅谷甄选项目笔记
    硅谷甄选运营平台此次教学课程为硅谷甄选运营平台项目,包含运营平台项目模板从0到1开发,以及数据大屏幕、权限等业务。此次教学课程涉及到技术栈包含:vue3+TypeScript+vue-router+pinia+element-plus+axios+echarts等技术栈。一、vue3组件通信方式通信仓库地址:https://gitee.c......
  • 在Vue3中使用vuex
    官方文档vue3+ts一、安装npminstallvuex@next--save二、创建并引入1.新建store文件夹,在store目录下新建index.jsimport{createStore}from'vuex'exportdefaultcreateStore({state:{},mutations:{},actions:{}modules:{}})2.......
  • [Javascript] Using defineProperty to observe the object props changes
    constobj={a:1,b:2,c:{a:1,b:2,},};functionisObject(val){returnval!==null&&typeofval==="object";}functionobserve(obj){for(letkeyinobj){letv=obj[key];if(isObject(v)){......
  • vue3中如何实现通用头部?
    在Vue中实现通用头部可以通过以下几种方式:一、使用Vue组件创建头部组件首先,创建一个名为HeaderComponent.vue的Vue组件文件。在这个组件中,可以使用Vue的模板语法来设计头部的结构,例如包含导航栏、品牌标志、搜索框等元素。<template><header><......