news 2026/6/9 11:09:18

vue中的props详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
vue中的props详解

一、props 的作用与设计目标

props 是父组件向子组件传递数据的唯一官方通道,其核心设计原则是:

  • 单向数据流:父 → 子

  • 子组件不得直接修改 props

  • props 主要用于数据展示和配置,而非业务状态管理

典型使用场景:

  • 表单组件接收初始值

  • 列表组件接收数据源

  • 通用组件接收配置项(如 size、type、disabled)


二、props 的两种定义方式(Vue 3)

1️⃣ 数组形式(不推荐在生产中使用)

export default { props: ['title', 'count'] }

特点:

  • 无类型校验

  • 无默认值

  • 仅适合 demo 或极简组件


2️⃣ 对象形式(推荐)

export default { props: { title: String, count: Number } }

这是最常用、最安全的方式。


三、完整 props 定义(工程级写法)

export default { props: { title: { type: String, required: true }, count: { type: Number, default: 0 }, list: { type: Array, default: () => [] }, user: { type: Object, default: () => ({}) }, status: { type: String, validator(value) { return ['success', 'error', 'warning'].includes(value) } } } }

关键字段说明

字段说明
type类型校验
required是否必传
default默认值
validator自定义校验

四、支持的 type 类型

String Number Boolean Array Object Date Function Symbol

多类型支持

props: { id: [String, Number] }

五、default 的正确写法(高频坑点)

❌ 错误写法(引用类型)

default: [] default: {}

✅ 正确写法

default: () => [] default: () => ({})

原因:

  • 防止多个组件实例共享同一引用对象


六、父组件如何传递 props

1️⃣ 静态传值

<Child title="hello" />

2️⃣ 动态绑定(最常用)

<Child :count="num" />

3️⃣ 对象展开(批量传递)

<Child v-bind="userInfo" />
const userInfo = { name: 'Tom', age: 18 }

七、子组件中使用 props(Vue 3)

1️⃣ Options API

export default { props: { title: String }, mounted() { console.log(this.title) } }

2️⃣ Composition API(推荐)

<script setup> const props = defineProps({ title: String, count: Number }) </script>

也可以解构(注意响应性):

const { title } = defineProps({ title: String })

⚠ 解构后不是响应式(除非使用toRefs

import { toRefs } from 'vue' const props = defineProps({ title: String }) const { title } = toRefs(props)

八、props 是只读的(非常重要)

❌ 错误:直接修改 props

props.count++

Vue 会警告:

Avoid mutating a prop directly


✅ 正确方式 1:使用本地状态

const localCount = ref(props.count)

✅ 正确方式 2:通过事件通知父组件

<Child :count="count" @update="count++" />

九、props 与 v-model(Vue 3 本质)

<Child v-model="value" />

等价于:

<Child :modelValue="value" @update:modelValue="($event)=>(value = $event)" />

子组件:

const props = defineProps({ modelValue: String }) const emit = defineEmits(['update:modelValue']) emit('update:modelValue', newValue)

十、props 的响应式特性

  • 父组件数据变化 → 子组件 props 自动更新

  • props 本身是浅只读响应式

  • 引用类型内部属性可变,但不建议直接改

props.user.name = 'Jack' // 不推荐,破坏数据流

十一、props 常见错误总结

错误说明
修改 props破坏单向数据流
default 使用对象引用共享
解构 props 丢响应式需要 toRefs
props 承担业务状态应使用 state / store
传值与接收命名不一致kebab-case / camelCase

十二、最佳实践建议(非常重要)

  1. props 只负责展示和配置

  2. 复杂交互通过 emit / v-model

  3. 引用类型 default 必须是函数

  4. 对外组件必须写完整 props 校验

  5. 不要在子组件修改父状态


十三、与 Vue 2 的主要区别(简述)

Vue 2Vue 3
setup
defineProps
v-modelvalue + inputmodelValue + update
TS 支持一般非常好
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/6 12:45:48

LobeChat适配LoRA微调模型的方法与注意事项

LobeChat 与 LoRA 微调模型的集成实践&#xff1a;轻量定制化 AI 助手的落地路径 在大模型时代&#xff0c;一个现实而普遍的困境摆在开发者面前&#xff1a;如何让强大的通用语言模型真正“懂”你的业务&#xff1f;比如&#xff0c;你希望它能准确理解公司内部术语、遵循特定…

作者头像 李华
网站建设 2026/6/8 15:34:38

LobeChat能否对接企业微信?组织内AI通知推送实验

LobeChat能否对接企业微信&#xff1f;组织内AI通知推送实验 在智能办公的浪潮中&#xff0c;一个现实问题日益凸显&#xff1a;我们训练有素的AI助手&#xff0c;往往只能“被动应答”&#xff0c;深藏于网页对话框之中。当它分析出一份关键预警或生成了重要报告时&#xff0c…

作者头像 李华
网站建设 2026/6/8 9:28:06

[总结] AI Agent工程师

文章目录基础Prompt EngineerLLMs 调用流式输出Tool Use上下文管理(记忆)、持久化LLM基础进阶MCPRAG向量数据库Query优化检索优化生成优化Agent架构ReAct模式Plan-and-Execute模式&#xff08;适合复杂任务&#xff09;Multi-Agent协作&#xff08;最复杂&#xff09;LangGraph…

作者头像 李华
网站建设 2026/6/7 18:27:15

LobeChat能否实现AI导游?旅游推荐与行程规划助手

LobeChat 能否实现 AI 导游&#xff1f;旅游推荐与行程规划助手 在智能出行日益普及的今天&#xff0c;旅行者不再满足于千篇一律的攻略模板。他们希望获得真正“懂自己”的建议&#xff1a;带孩子的家庭想知道哪些景点推婴儿车最方便&#xff1b;摄影爱好者关心清晨几点到西湖…

作者头像 李华
网站建设 2026/6/8 14:51:51

AI如何帮你生成高效密码字典?

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个密码字典生成工具&#xff0c;能够根据用户输入的关键词、个人信息&#xff08;如生日、姓名等&#xff09;自动生成常见密码组合。支持自定义规则&#xff0c;如长度限制、…

作者头像 李华
网站建设 2026/6/8 10:53:54

无人机产业变革前夜:当飞行器开始“思考”

算法定义硬件的时代&#xff0c;无人机正从飞行平台演变为自主决策系统在森林防火巡查中&#xff0c;无人机不仅能识别火情&#xff0c;还能区分枯树与潜在火情&#xff1b;在城市高空&#xff0c;它可以辨别企业团建与非法聚集&#xff1b;在应急救援中&#xff0c;它能穿越浓…

作者头像 李华