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

vue 中 props 用法使用总结和示例演示

以下是 Vue 中 props 的用法总结及示例演示:

一、核心作用与基本原则

  1. 核心作用

    • 父子组件通信props 是父组件向子组件传递数据的单向通道,用于实现组件间的数据共享[1][3][7]。
    • 数据验证与规范化:通过类型声明、必填项设置、默认值等确保数据合理性[1][2][5]。
  2. 基本原则

    • 单向数据流:数据只能从父组件流向子组件,子组件不可直接修改 props(若需修改需通过事件通知父组件)[1][3][5]。
    • 命名规范:父组件传递时使用短横线分隔(kebab-case),子组件定义时使用驼峰式(camelCase)[3][5]。

二、使用方法详解

1. 定义 props
形式适用场景示例
数组简单声明接收的属性名props: ['title', 'count']
对象详细配置类型、默认值等props: { title: String, count: { type: Number, default: 0 } }
2. 类型检查与验证

支持的类型包括 StringNumberBooleanArrayObjectFunctionSymbol 等[2][5]。具体示例如下:

  • 基础类型检查propA: Number
  • 多类型检查propB: [String, Number]
  • 必填项propC: { type: String, required: true }
  • 默认值propD: { type: Number, default: 100 }
  • 自定义验证函数propE: { validator: (value) => ['success', 'warning', 'danger'].includes(value) }[2][5]。
3. 默认值设置
  • 基本类型:直接赋值(如 default: 0)。
  • 引用类型:需用工厂函数返回新对象/数组,避免多个实例共享同一引用[5][7]。示例如下:
    • user: { type: Object, default: () => ({ name: '匿名用户', age: 18 }) }
    • tags: { type: Array, default: () => ['vue', 'javascript'] }[7]。
4. 动态与静态传递
  • 静态传递:直接写入固定值(适用于固定数据)[3][6]。
  • 动态传递:绑定父组件的 datacomputed 属性(适用于变化数据)[3][6]。
5. Vue 3 特性
  • Composition API:使用 defineProps 声明 props[4][7]。
  • TypeScript 支持:通过泛型或 PropType 定义复杂类型[7]。示例如下:
    • interface User { name: string; age: number }; const props = defineProps<{ user: User }>()
    • book: { type: Object as PropType<Book>, required: true }[7]。

三、示例演示

1. 基础传递与渲染

父组件

<template><ChildComponent :message="parentMessage" />
</template>
<script>
import ChildComponent from './ChildComponent.vue';
export default {components: { ChildComponent },data() {return { parentMessage: 'Hello from Parent!' };}
};
</script>

子组件

<template><p>{{ message }}</p>
</template>
<script>
export default {props: {message: { type: String, required: true } // 必填且为字符串}
};
</script>
2. 类型验证与默认值

子组件

props: {age: {type: Number,default: 18, // 默认值validator(value) { return value >= 0 && value <= 150; } // 自定义验证},hobbies: {type: Array,validator(value) { return value.length > 0; } // 至少一个元素}
}
3. Vue 3 Composition API 示例

子组件

const props = defineProps({title: { type: String, required: true }, // 必填字符串count: { type: Number, default: 0 },     // 可选数字,默认0user: {                                  // 对象类型type: Object,default: () => ({ name: 'Guest', age: 20 })}
});
4. 动态传递与响应式更新

父组件

<template><input v-model="parentMessage" placeholder="输入消息" /><ChildComponent :message="parentMessage" />
</template>
<script>
import ChildComponent from './ChildComponent.vue';
export default {components: { ChildComponent },data() {return { parentMessage: '' };}
};
</script>

子组件

<template><div><p>{{ message }}</p> <!-- 实时响应输入 --></div>
</template>
<script>
export default {props: { message: String }
};
</script>

四、注意事项

  1. 禁止直接修改 props:子组件应通过 $emit 触发事件通知父组件修改数据[1][3][5]。
  2. 引用类型默认值:必须使用工厂函数返回新对象/数组,避免多个实例共享同一引用[5][7]。
  3. prop 属性处理:未声明的属性会绑定到子组件的根元素,可通过 inheritAttrs: false$attrs 手动处理[5]。
  4. Vue 3 弃用 .sync:改用 v-model 实现双向绑定[5]。

总之,通过合理使用 props,可以实现父子组件间高效、安全的数据交互。在实际开发中,根据项目需求选择合适的 props 设置方式,能够提高代码的可维护性和稳定性。

http://www.dtcms.com/a/424159.html

相关文章:

  • SymPy 绘图完全指南:从基础到高级应用
  • C语言基础入门(二)
  • ClientAbortException: java.io.IOException: Broken pipe是什么?
  • 书店网站建设个人总结惠州网页建站模板
  • 西安 网站建设 培训班常州做网站公司有哪些
  • 嵌入式系统应用--TFTLCD 显示实验 3 之内存拓展
  • TEE(可信执行环境)与REE(富执行环境):构建现代智能设备的安全基石与技术全景
  • 网站开发洲际做网站如何接单子
  • 如何查看网站推广做的好云南省玉溪市建设局官方网站
  • ui设计网站建设是什么意思erp系统有哪些功能模块
  • Python将维吾尔语从 ULY 到 UEY 的自动转换
  • Spring AI整合聊天模型DeepSeek
  • 做国外网站做什么内容好无锡市城市建设规划局网站
  • 软装设计网站推荐湖南畅想网站建设
  • 手机电影网站怎么做wordpress邮箱登录
  • 圆桌对话 | “内卷”与“出海”:中国智能网联汽车的破局之路与未来生态构想
  • 网站建设开头wordpress go
  • 门户子网站建设申请微页制作平台网站建设
  • linux拷贝命令
  • 遥感目标检测数据集汇总,覆盖城市问题/工业安全/农业健康/室内场景……
  • LeetCode 刷题【92. 反转链表 II】
  • Spring Boot 异步处理框架核心源码解析及实现原理
  • 三只松鼠网站怎样做p2p网站开发多少钱
  • C++(day4)
  • GESP2025年9月C++三级编程题日历制作题解参考
  • 网站建设与管理实训心得怎么写2023热点新闻事件
  • 做网站很火的APP来个网站吧好人一生平安百度贴吧
  • 花未全开月未圆:布隆过滤器的留白美学
  • 网站安全措施优秀个人网页
  • Flutter完整开发指南 | FlutterDart – The Complete Guide