当前位置: 首页 > news >正文

vue2 vue3 props 的处理机制

在 Vue 2 中,props 是单向数据流,父组件向子组件传递的 props 默认情况下是不具有响应式特性的。这意味着当父组件的数据发生变化时,如果传递给子组件的 props 发生变化,子组件不会自动更新视图。

具体来说,在 Vue 2 中:

  1. 单向数据流: 父组件通过 props 将数据传递给子组件。子组件可以将 props 视为本地数据来使用,但是如果父组件的数据发生变化,不会自动更新传递给子组件的 props。

  2. 非响应式: 如果想要在子组件内部响应父组件数据的变化,需要使用 watch 或者 computed 属性来手动处理。例如,可以在子组件内部使用 watch 来监听 props 的变化并做出相应的响应。

 

<template><div><p>Message from parent: {{ message }}</p><button @click="changeMessage">Change Message</button></div>
</template><script>
export default {props: ['message'], // 父组件传递的 propsmethods: {changeMessage() {// 父组件传递的 props 是单向的,子组件不能直接修改// 如果需要修改,可以通过事件向父组件发送请求this.$emit('update:message', 'Updated message from child');}},watch: {message(newValue, oldValue) {console.log('Prop `message` changed:', newValue, oldValue);// 在 props 变化时可以执行额外的逻辑}}
};
</script>

在 Vue 3 中,props 的处理机制与 Vue 2 有所不同,尤其是在响应式方面有了重要的改进和变化。

在 Vue 3 中,props 默认情况下是响应式的。这意味着:

  1. 自动更新: 当父组件的 prop 发生变化时,子组件会自动响应这些变化并更新视图。这与 Vue 2 不同,Vue 2 中的 props 是非响应式的,子组件需要手动处理变化。

  2. Reactivity API 的支持: Vue 3 引入了 Composition API,其中包含了许多新的 API,如 refreactive 等,这些 API 在处理 props 和组件内部状态时都是响应式的。

  3. 类型校验与默认值: 与 Vue 2 类似,Vue 3 也支持通过 props 定义类型校验和默认值,但是 props 现在默认是响应式的,因此它们更加灵活和方便使用。

  4. <template><div><p>Message from parent: {{ message }}</p><button @click="changeMessage">Change Message</button></div>
    </template><script>
    import { defineComponent, ref } from 'vue';export default defineComponent({props: {message: String // 父组件传递的 props,类型为 String},setup(props) {// 在 setup 函数中可以直接访问 props,并且它们是响应式的// 使用 ref 创建响应式数据const internalMessage = ref(props.message);function changeMessage() {internalMessage.value = 'Updated message from child';}return {message: internalMessage,changeMessage};}
    });
    </script>
    
  • 在上面的示例中,props message 是从父组件传递给子组件的。在子组件中,我们使用 ref 来创建一个响应式的数据 internalMessage,并在 setup 函数中初始化为 props.message 的值。这样,当父组件的 message 发生变化时,子组件的视图会自动更新。

因此,Vue 3 中的 props 是默认响应式的,这是 Vue 3 在响应式系统方面的一大进步,使得开发者在处理组件间的数据传递和响应时更加方便和直观。

so 其实computed没必要。 

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 如何利用AI工具获取所有Excel公式?
  • 视频隐写术
  • docker -v 到底和那个一样?type=volume还是type=bind的解释
  • Java环境变量配置详解:从安装到调试
  • 【Vulnhub系列】Vulnhub_Seattle_003靶场渗透(原创)
  • C语言经典习题24
  • Linux进程信号详解【下】
  • springSecurity学习之springSecurity过滤器
  • Flutter大型项目架构:私有组件包管理
  • vue3前端开发-小兔鲜项目-登录功能的业务接口调用
  • 在IDEA中切换分支没有反应
  • JAVA入门
  • 为什么请求频率高,就应该使用轮询而不是中断呢?
  • [CR]厚云填补_多云条件下土地覆盖分割的多模态多任务学习
  • 手写一个JVM自定义类加载器
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【Leetcode】104. 二叉树的最大深度
  • 【笔记】你不知道的JS读书笔记——Promise
  • AngularJS指令开发(1)——参数详解
  • happypack两次报错的问题
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • Iterator 和 for...of 循环
  • javascript从右向左截取指定位数字符的3种方法
  • leetcode46 Permutation 排列组合
  • Linux Process Manage
  • mysql外键的使用
  • 从setTimeout-setInterval看JS线程
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 计算机在识别图像时“看到”了什么?
  • 将回调地狱按在地上摩擦的Promise
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 我的业余项目总结
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • ionic入门之数据绑定显示-1
  • ​第20课 在Android Native开发中加入新的C++类
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • (ZT)薛涌:谈贫说富
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (篇九)MySQL常用内置函数
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .so文件(linux系统)
  • @ohos.systemParameterEnhance系统参数接口调用:控制设备硬件(执行shell命令方式)
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [ajaxupload] - 上传文件同时附件参数值
  • [Angular] 笔记 20:NgContent
  • [BZOJ1040][P2607][ZJOI2008]骑士[树形DP+基环树]
  • [CCF-CSP] 202303-4 星际网络II