vue3父子组件传值中props使用细节浅析

 更新时间:2022年03月15日 10:57:09   作者:前端.攻城狮  
这篇文章主要给大家介绍了关于vue3父子组件传值中props使用细节的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

setup函数的参数

它主要有两个参数:

  • 第一个参数:props :父组件传递过来的属性会被放到props对象中
  • 第二个参数:context:包含3个属性
  1. attrs:所有的非prop的attribute
  2. slots:父组件传递过来的插槽(这个在以渲染函数返回时会有作用,后面会讲到)
  3. emit:当我们组件内部需要发出事件时会用到emit

一、父组件要给子组件传值时,可以通过props来完成组件的通信

// 父组件
<template>
    // 通过自定义属性的方式给子组件传递数据
	<message title="父组件中的值"></message>
</template>



// 子组件
<template>
    // 使用父组件传递过来的值
    <h2> {{title}} </h2>
</template>
<script>
	export default {
		// 通过props 接收父组件传递过来的数据,模板中可以直接使用
		props: ['title'],

		setup(props, context) {
			// setup函数中要使用的话,要接收一下
			console.log(props.title)
        }
</script>

子组件中props两种常见的用法

方式一:字符串数组,数组中的字符串就是父组件中引用子组件时自定义attribute的名称

方式二:对象类型,我们可以在指定attribute名称的同时,指定它需要传递的类型,是否时必须的,默认值等

细节一:props中属性可以指定的类型

  • String
  • Number
  • Boolean
  • Array
  • Object
  • Date
  • Function
  • Symbol

细节二:props中不同类型的写法

props: {
	// 基础类型指定
	propA: Number,
	// 指定多个类型
	propB: [String, Number],
	// 指定必传类型
	propC: {
		type: String,
		required: true
    },
    // 带有默认值的数字
    propD: {
		type: Number,
		default: 100
	},
	// 带有默认值的对象
	propE: {
		type: Object,
		// 对象或数组默认值必须从一个工厂函数获取
		default() {
			return { mes: 'lihua'}
		}
	},
	// 自定义验证函数
	propF: {
		validator(value) {
			return ['warning', 'success'].includes(value)
		}
	},
	// 具有默认值的函数
	prorG: {
		type: Function,
		default() {
			return 'default function'
		}
	}
}

细节三:Props的大小写命名

属性命名不推荐驼峰命名法法,需要用 a-b(短横线分隔命名)

二、子组件给父组件传值

父组件

//父组件
<template>
    // 给子组件传递自定义函数
	<message @add="addNum"></message>
</template>
<script>
	export default {
		components: {
			message
		}
		setup() {
          const addNum = (value) => {
            // 接收子组件传递过来的值
			console.log(value)
          }
      
        // 导出方法提供给模板使用
        return {
          addNum
        }
	}
</script>

子组件

//子组件
<template>
    // 使用父组件传递过来的值
    <button @click="increment"></button>
</template>
<script>
	export default {
		// 1. 通过第二个参数 context 接收父组件传递过来的方法
		setup(props, context) {
          const increment = () => {
            // 通过 context.emit触发父组件的方法,第二个参数为传递的参数,可以传递多个
			context.emit('add', 100)
			context.emit('add', 100, 'aaa', 'bbb')
          }
      
          // 导出方法提供给模板使用
          return {
            increment
          }
        }

        // 2. 通过第二个参数 解构 emits 接收父组件传递过来的函数
		setup(props, { emit }) {
          const increment = () => {
            // 通过emit触发父组件的方法,第二个参数为传递的参数,可以传递多个
			emit('add', 100)
			emit('add', 100, 'aaa', 'bbb')
          }
 
          return {
            increment
          }
        }
	}
</script>

总结

到此这篇关于vue3父子组件传值中props使用细节的文章就介绍到这了,更多相关vue3父子组件传值内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue3导入Elementplus时组件无法加载的情况及解决

    Vue3导入Elementplus时组件无法加载的情况及解决

    这篇文章主要介绍了Vue3导入Elementplus时组件无法加载的情况及解决方案,具有很好的参考价值,希望对大家有所帮助
    2024-03-03
  • element 表格多级表头子列固定的实现

    element 表格多级表头子列固定的实现

    本文主要介绍了element 表格多级表头子列固定的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • VUE axios每次请求添加时间戳问题

    VUE axios每次请求添加时间戳问题

    这篇文章主要介绍了VUE axios每次请求添加时间戳问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • vue实现动态路由的详细代码示例

    vue实现动态路由的详细代码示例

    动态路由,动态即不是写死的,是可变的,下面这篇文章主要给大家介绍了关于vue实现动态路由的详细代码示例,文中通过图文以及代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • 关于Vue单页面骨架屏实践记录

    关于Vue单页面骨架屏实践记录

    这篇文章主要给大家介绍了关于Vue单页面骨架屏实践的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用vue具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-12-12
  • vue2.x 通过后端接口代理,获取qq音乐api的数据示例

    vue2.x 通过后端接口代理,获取qq音乐api的数据示例

    今天小编就为大家分享一篇vue2.x 通过后端接口代理,获取qq音乐api的数据示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • 关于Element-ui中table默认选中toggleRowSelection问题

    关于Element-ui中table默认选中toggleRowSelection问题

    这篇文章主要介绍了关于Element-ui中table默认选中toggleRowSelection问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • 组件库中使用 vue-i18n 国际化的案例详解

    组件库中使用 vue-i18n 国际化的案例详解

    这篇文章主要介绍了组件库中使用 vue-i18n 国际化,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • VSCode开发UNI-APP 配置教程及插件

    VSCode开发UNI-APP 配置教程及插件

    uni-app 是一个使用 Vue.js 开发所有前端应用的框架,今天通过本文给大家分享VSCode开发UNI-APP 配置教程及插件推荐与注意事项,感兴趣的朋友一起看看吧
    2021-08-08
  • vue源码学习之Object.defineProperty对象属性监听

    vue源码学习之Object.defineProperty对象属性监听

    这篇文章主要介绍了vue源码学习之Object.defineProperty对象属性监听,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05

最新评论