网站建设定制开发Vue defineProps 与 props

props \ defineProps

  • 命名:如果一个 prop 网站建设定制开发的名字很长,网站建设定制开发建议使用小驼峰 props: { greetingMessage: String }
  • 使用:
  1. 网站建设定制开发使用时为了和 HTML attribute 对齐,网站建设定制开发通常将其写为 短横线 形式 <MyComponent greeting-message="hello" />

  2. 网站建设定制开发有时虽为常量但也要使用 ,网站建设定制开发因为这是一个 JavaScript 表达式而不是一个字符串

<BlogPost :likes="42" /> /* 42 为数字,不为字符串 */<BlogPost :likes="false" /> /* false 为布尔值,不为字符串 */<BlogPost is-published /> /* 仅写上 prop 但不传值,会隐式转换为 `true` */如果没有在 props 中把 is-published 的类型设置为 Boolean,则这里的值为空字符串,而不是“true”。
  • 1
  • 2
  • 3
  • 4
  1. 只使用 v-bind 而非 :prop-name
// data() 中定义post: {	id: 1,	title: 'My Journey with Vue'}<BlogPost v-bind="post" />// 等价于<BlogPost :id="post.id" :title="post.title" />
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 单项数据流:父级 prop 的更新会向下流动到子组件中, 不应该在一个子组件内部改变 prop

1 props

一个组件需要显式声明它所接受的 props,这样 Vue 才能知道外部传入的哪些是 props,哪些是 attribute

  • <template> 中引用: propA
  • <script> 中引用: this.propsA
// 1. 字符串数组props: ['foo']// 2. 对象prop: {	title: String,  // title 为名称,String 为构造函数	likes: Number}// 3. 可以为 props 中的值提供一个带有验证需求的对象,而不是一个字符串数组。prop: {	// 基础的类型检查 (`null` 和 `undefined` 会通过任何类型验证)	propA: Number,	// 多个可能的类型	propB: [String, Number],	// 必填的字符串	propC: {	  type: String,	  required: true,	},	// 带有默认值的数字	propD: {	  type: Number,	  default: 100,	},	// 带有默认值的对象	propE: {	  type: Object,	  // 对象或数组默认值必须从一个工厂函数获取	  default: function () {		return { message: "hello" };	  },	},	propE: { 	  type: Object, 	  default: () => {} 	},	propE: {	  type: Array,	  default() {	    return [];	  }	},	// 自定义验证函数	propF: {	  validator: function (value) {		// 这个值必须匹配下列字符串中的一个		return ["success", "warning", "danger"].indexOf(value) !== -1;	  },	},}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • type 可以是原生构造器:String、Number、Boolean、Array、Object、Date、Function、Symbol
  • type 也可以是一个自定义构造器,使用 instanceof 检测。

2 defineProps

只能在 <script setup> 中使用,无需导入

defineProps API 接收与 props 选项相同的值

  • <template> 中引用: propA
  • <script> 中引用: props.propsA
// 仅<template> 中使用 propA、propBdefineProps({  propA: { type: [Number, String], default: '' },  propB: { type: Number, default: 2 }});// <script> 中也使用 propA、propB, 声明为变量const props = defineProps({  propA: { type: [Number, String], default: '' },  propB: { type: Number, default: 2 }});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 因为 defineProps 只是一个语法糖,并不是一个真实存在的函数,它的作用在于告诉 vue 运行时工具,这里我们要引入一个变量。所以不能用普通变量的方式去看待它。
  • 用于组件通信中父级组件给子级组件传值,其用来声明 props,其接收值为props选项相同的值
  • 默认支持常见的类型检查,在 ts 下,我们需要明确变量的类型,类型经常是我们的自定义类型
  • 只能在 <script setup> 中使用
  • 不需要被导入即可使用,它会在编译 <script setup> 语法块时一同编译掉
  • 必须在 <script setup> 的顶层使用,不可以在 <script setup> 的局部变量中引用
  • 不可以访问 <script setup> 中定义的其他变量,因为在编译时整个表达式都会被移到外部的函数中
  • defineProps 是 props 从选项式 API 到组合式 API 的变体


  • 最初的 Composition API 是在 Options API 基础上改进的,不仅需要使用 setup() 函数,还要在 setup() 末尾返回所有模版需要用到的变量和函数,使用起来相当繁琐。于是后面就增加了 <script setup> 语法糖:
  • 从生命周期来讲,相当于 created
  • 支持顶层 await(因为实际上这还是个 setup() 函数)
  • 所有 import 的内容、声明的变量和函数默认都返回
  • 至少省了两层缩进
  • 但是由于少了 export,没法传参,也不方便暴露接口,所以作者就增加了三个工具方法:defineProps、defineEmits、defineExpose
  • 注意,这三个工具方法只是帮助 Vue 编译器构建组件,它们不会出现在最终代码里,我们也不能预期它们会像普通函数那样工作。
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发