第二阶段:Vue 组件化开发(第 18天)

Vue组件间通信:父组件向子组件传值(props)

一、核心概念
  1. props的作用

    父组件通过props向子组件传递数据,实现数据由上至下的流动。

  2. props的定义

    子组件需在props选项中声明接收的属性:

    javascript 复制代码
    // 子组件 ChildComponent.vue
    export default {
      props: ['message'] // 简单声明
    }
  3. 类型与默认值

    支持类型校验和默认值设置:

    javascript 复制代码
    props: {
      count: {
        type: Number,    // 指定为数字类型
        default: 0       // 默认值
      },
      items: {
        type: Array,
        required: true  // 必须传递
      }
    }

二、案例演示
父组件(传递数据)
vue 复制代码
<template>
  <ChildComponent 
    :message="parentMsg" 
    :count="num" 
    :items="list"
  />
</template>

<script>
export default {
  data() {
    return {
      parentMsg: "来自父组件的数据",
      num: 42,
      list: ["A", "B", "C"]
    }
  }
}
</script>
子组件(接收与渲染)
vue 复制代码
<template>
  <div>
    <p>{{ message }}</p> <!-- 输出:来自父组件的数据 -->
    <p>计数:{{ count }}</p> <!-- 输出:42 -->
    <ul>
      <li v-for="item in items" :key="item">{{ item }}</li>
    </ul>
  </div>
</template>

<script>
export default {
  props: {
    message: String,
    count: {
      type: Number,
      default: 100
    },
    items: {
      type: Array,
      required: true
    }
  }
}
</script>

三、单向数据流原则
  1. 直接修改props的报错

    若在子组件中尝试修改count

    javascript 复制代码
    this.count = 100; // 错误操作!

    控制台将报错:

    复制代码
    Avoid mutating a prop directly...
  2. 正确解决方案

    • 子组件通过$emit事件通知父组件修改数据
    javascript 复制代码
    this.$emit('update-count', newValue);
    • 父组件监听事件并更新:
    vue 复制代码
    <ChildComponent @update-count="num = $event" />

四、总结要点
关键点 说明
声明式接收 子组件通过props选项显式声明接收的属性
类型校验 支持String/Number/Boolean/Array/Object等类型校验
默认值与必传 default设置默认值,required: true强制必须传递
单向数据流 子组件不可直接修改props,需通过事件通知父组件
动态传递 父组件使用v-bind(简写:)动态绑定数据
相关推荐
shawxlee5 小时前
vue3在public下封装config.js自定义配置动态数据,可在打包后直接修改,方便后端部署及后续维护
前端·javascript·经验分享·vue·团队开发·js·项目优化
用户059540174466 小时前
把记忆存储的回归测试从手工换成 Playwright + GitHub Actions,线上缺陷降低 80%
前端·css
触底反弹6 小时前
🚀 从 DOM0 级到 React 合成事件:前端事件监听的 20 年演进史
前端·react.js·面试
kyriewen6 小时前
我给前端项目的接口请求套了6层保护——才发现以前一直在裸奔
前端·javascript·面试
颜酱6 小时前
04 | 召回前置准备:搭好召回所需的四个数据库
前端·人工智能·后端
郝亚军8 小时前
如何安装webstorm、Node.js和vue CLI
前端·javascript·vue.js
IT_陈寒8 小时前
React的useEffect依赖项把我坑惨了
前端·人工智能·后端
东方小月8 小时前
从零开发一个Coding Agent:monorepo项目搭建
前端·后端·node.js
葬送的代码人生8 小时前
别再让 AI 瞎写代码了!Vibe Coding 三步法教你写出靠谱代码
前端·设计模式·架构
Shirley~~8 小时前
Code-Review-Graph:面向 AI 辅助代码审查的结构化上下文引擎
前端·ai编程