app.component("name", "> app.component("name", "> app.component("name", ">
Vue 词条目录
前端Wiki/Vue/深入/组件基础

组件与 props

组件是可复用的 Vue 实例:有自己的数据、模板与方法,通过 app.component("name", 配置) 或单文件组件(.vue 文件)定义。使用时像写 HTML 标签一样 <my-comp></my-comp>。

props 是父到子的单向数据通道:父组件用 :title="值" 传数据,子组件用 props: ["title"] 或对象语法声明并限定类型。子组件不要直接改 props——要改就通过事件通知父组件,这就是单向数据流。

  • 组件 = 带名字的可复用 Vue 实例,可嵌套成组件树
  • props 声明可加类型/默认值/必填:{ title: String, required: true }
  • 单向数据流:父传子用 props,子改父用 $emit 事件
HTML
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>组件与 props</title>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<body>
  <div id="app">
    <!-- 同一组件复用三次,传不同数据 -->
    <product-card name="Vue 书" price="89"></product-card>
    <product-card name="键盘" price="299"></product-card>
  </div>

<script>
  const { createApp } = Vue;
  const app = createApp({});

  app.component('product-card', {
    // 声明 props 并校验类型
    props: {
      name: { type: String, required: true },
      price: { type: Number, default: 0 }
    },
    template: `
      <div style="border:1px solid #42b883;padding:12px;margin:8px">
        <b>{{ name }}</b>
        <p>价格:{{ price }} 元</p>
      </div>`
  });

  app.mount('#app');
</script>
</body>
</html>
本节要点组件通过 props 接收外部数据并校验;props 只读,子想改父数据要发事件。