首页 > 其他分享 >vue3组件通信Props()

vue3组件通信Props()

时间:2023-12-07 16:31:34浏览次数:40  
标签:Props default props msg vue3 组件 默认值 type defineProps

vue3组件通信

父传子

defineProps()

在使用 <script setup> 的单文件组件中,props 可以使用 defineProps() 宏来声明:

//父
<HelloWorld msg="You did it!" />
  <!-- 根据一个变量的值动态传入 -->
//<BlogPost :title="post.title" />

//子
<script setup>
 //写法1
   defineProps({
    msg: {
      type: String,
      required: true
    }
//或
// defineProps(['msg'])
//写法2
//const props = defineProps(['msg'])
//console.log(props.msg)
  })
</script>
<template>
     <h1 class="green">{{ msg }}</h1>
</template>

vue3组件通信Props()_props

TypeScript 使用 <script setup>

<script setup lang="ts">
defineProps<{
  title?: string
  likes?: number
}>()
</script>

 props

在没有使用 <script setup> 的组件中,prop 可以使用 props 选项来声明:

export default {
  props: ['foo'],
  setup(props) {
    // setup() 接收 props 作为第一个参数
    console.log(props.foo)
  }
}

Prop 校验

defineProps({
  // 基础类型检查
  // (给出 `null` 和 `undefined` 值则会跳过任何类型检查)
  propA: Number,
  // 多种可能的类型
  propB: [String, Number],
  // 必传,且为 String 类型
  propC: {
    type: String,
    required: true
  },
  // Number 类型的默认值
  propD: {
    type: Number,
    default: 100
  },
  // 对象类型的默认值
  propE: {
    type: Object,
    // 对象或数组的默认值
    // 必须从一个工厂函数返回。
    // 该函数接收组件所接收到的原始 prop 作为参数。
    default(rawProps) {
      return { message: 'hello' }
    }
  },
  // 自定义类型校验函数
  propF: {
    validator(value) {
      // The value must match one of these strings
      return ['success', 'warning', 'danger'].includes(value)
    }
  },
  // 函数类型的默认值
  propG: {
    type: Function,
    // 不像对象或数组的默认,这不是一个
    // 工厂函数。这会是一个用来作为默认值的函数
    default() {
      return 'Default function'
    }
  }
})

标签:Props,default,props,msg,vue3,组件,默认值,type,defineProps
From: https://blog.51cto.com/u_16373718/8724613

相关文章

  • vue中孙子调用爷爷组件的方法怎么调用?
    使用Vue的provide和inject来实现跨层级的组件通信。provide允许一个祖先组件(爷爷组件)提供数据,而inject允许子孙组件(孙子组件)在任意层级注入这个数据。通过这种方式,你可以在孙子组件中访问到爷爷组件提供的方法。以下是一个简单的例子://在爷爷组件中提供方法exportdefault......
  • uni-app 基础架构搭建 ts+vue3 命令行
    1. 安装全局degitnpminstall-gdegit2.创建工程my-vue3-ts-project#创建以javascript开发的工程npxdegitdcloudio/uni-preset-vue#vitemy-vue3-ts-project#创建以ts开发的工程npxdegitdcloudio/uni-preset-vue#vite-tsmy-vue3-ts-project3进入目录cdmy-v......
  • 开发者的福音:TinyVue 组件库文档大优化!类型更详细,描述更清晰!
    你好,我是Kagol。前言从今年2月份开源以来,有不少朋友给我们TinyVue组件库提了文档优化的建议,这些建议都非常中肯,我们也在持续对文档进行优化,并且从中总结出了大家对于文档优化的一些共性问题,形成了一份《组件demo和api文档编写规范》为了提升开发者阅读文档的体验,从9月......
  • forms组件介绍
    1注册功能,登录功能,前端需要校验(字段长度,邮箱是否合法。。。)2前端校验可以没有,后端校验是必须的,使用传统方式if判断写的很多3借助于forms组件,可以快速实现字段的校验 fromdjango.formsimportForm 注意:#form=myforms.MyForm(data)实例化得到对象#校验数据:form.is_v......
  • Spring MVC 源码 - HandlerAdapter 组件(二)之 ServletInvocableHandlerMethod
    HandlerAdapter组件HandlerAdapter组件,处理器的适配器。因为处理器handler的类型是Object类型,需要有一个调用者来实现handler是怎么被执行。Spring中的处理器的实现多变,比如用户的处理器可以实现Controller接口或者HttpRequestHandler接口,也可以用@RequestMapping注......
  • vant组件一个文本框添加多项校验
    下图为用户密码校验表单,需要对密码是否为空,密码长度,以及密码强度进行校验。但是“密码格式不正确!”这个校验信息并不是我想要的,我想在isPassWordStrength方法中区分开密码长度提示和密码强度提示,方便用户知道具体是什么问题导致校验不通过。<van-fieldrequiredv-model......
  • VUE3引入pinia配置使用
    文档:https://pinia.vuejs.org/zh/introduction.html1.引入pinnanpminstallpinia-S2.在src文件里面创建store文件article.js在main.js中引用pinnaimport{defineStore}from'pinia'//你可以对`defineStore()`的返回值进行任意命名,但最好使用store的名字,同时以......
  • React 组件通信方式
    人生的游戏不在于拿了一副好牌,而在于怎样去打好坏牌,世上没有常胜将军,勇于超越自我者才能得到最后的奖杯。1.父子组件通信方式1.1父组件传递到子组件直接通过属性进行传递,数据的传递可以提高组件的复用性。1.2子组件传递到父组件通过回调函数(callback)来实现。ref标......
  • dom断点可定位react组件值修改
    react组件的值修改,也可以使用dom断点来定位。之前一直误区,认为react组件的修改,不能用dom断点来拦截,实际上在涉及到修改具体原生组件属性的时候,也可定位。例如:react组件内部使用了input组件,react组件值变化导致input的value发生改变,使用dom断点就可定位。由于input组件的属性修......
  • Vue3+Vite+ElementPlus管理系统常见问题
     本文本记录了使用Vue3+Vite+ElementPlus从0开始搭建一个前端工程会面临的常见问题,没有技术深度,但全都是解决实际问题的干货,可以当作是问题手册以备后用。本人日常工作偏后端开发,因此,文中的一些前端术语描述可能不严谨,敬请谅解。重点是:这里记录的解决方案都是行之有效果的,拿来......