首页 > 其他分享 >props

props

时间:2023-12-07 22:44:25浏览次数:27  
标签:const 初始值 prop props 组件 defineProps

单向数据流

所有的 props 都遵循着单向绑定原则,props 因父组件的更新而变化,自然地将新的状态向下流往子组件,而不会逆向传递。这避免了子组件意外修改父组件的状态的情况,不然应用的数据流将很容易变得混乱而难以理解。

另外,每次父组件更新后,所有的子组件中的 props 都会被更新到最新值,这意味着你不应该在子组件中去更改一个 prop。若你这么做了,Vue 会在控制台上向你抛出警告:

const props = defineProps(['foo'])

// ❌ 警告!prop 是只读的!
props.foo = 'bar'

导致你想要更改一个 prop 的需求通常来源于以下两种场景:

  1. prop 被用于传入初始值;而子组件想在之后将其作为一个局部数据属性。在这种情况下,最好是新定义一个局部数据属性,从 props 上获取初始值即可:
const props = defineProps(['initialCounter'])

// 计数器只是将 props.initialCounter 作为初始值
// 像下面这样做就使 prop 和后续更新无关了
const counter = ref(props.initialCounter)
  1. 需要对传入的 prop 值做进一步的转换。在这种情况中,最好是基于该 prop 值定义一个计算属性:
const props = defineProps(['size'])

// 该 prop 变更时计算属性也会自动更新
const normalizedSize = computed(() => props.size.trim().toLowerCase())

props命名规则

如果一个 prop 的名字很长,应使用 camelCase(小驼峰) 形式,因为它们是合法的 JavaScript 标识符,可以直接在模板的表达式中使用,也可以避免在作为属性 key 名时必须加上引号。

defineProps({
  greetingMessage: String
})

虽然理论上你也可以在向子组件传递 props 时使用 camelCase 形式 (使用 DOM 内模板时例外),但实际上为了和 HTML attribute 对齐,我们通常会将其写为 kebab-case 形式

<MyComponent greeting-message="hello" />

标签:const,初始值,prop,props,组件,defineProps
From: https://www.cnblogs.com/zychuan/p/17884170.html

相关文章

  • vue3组件通信Props()
    vue3组件通信父传子defineProps()在使用 <scriptsetup> 的单文件组件中,props可以使用 defineProps() 宏来声明://父<HelloWorldmsg="Youdidit!"/><!--根据一个变量的值动态传入-->//<BlogPost:title="post.title"/>//子<scriptsetup>//写法1......
  • props传来的每个list对象加属性
    情景:在vue组件获取了js里存储的数据后,想要给获取的list的每一条数据加上相同的属性作为公共部分//页面打开即加载方法mounted(){this.init()},methods:{init(){//给新的进行重新赋d:this.xAxisStyle.forEach((xAxis)=>{xAxis.data=this.x......
  • vue3_Extraneous non-props attributes (class) were passed to component but could
    今天的开发中发现了这个问题Extraneousnon-propsattributes(class)werepassedtocomponentbutcouldnotbeautomaticallyinheritedbecausecomponentrendersfragmentortextrootnodes.原因:是因为vue3中允许在<template>中不设置根节点,所以我在某个页面中......
  • vue路由通过props传参
    方式一:布尔模式方法一:直接传参路由配置:{path:'/user/:id/:price',name:'User',component:User,props:true}页面A<template><div><router-link:to="{name:'User',params:{id:12320,price:'$10......
  • Vue3调用Element-plus涉及子组件v-model双向绑定props问题
    Vue3调用Element-plus涉及子组件v-model双向绑定props问题在Vue3调用Element-plus的el-dialog组件时,碰到个很有意思的问题,el-dialog的属性值v-model直接控制对话框的显示与否,点击关闭对话框和遮罩区域,组件内部会自动更改v-model的值为false来关闭对话框。问题在于当组件作为子组......
  • React学习笔记16-属性props
    1.属性的定义props是正常是外部传入的,组件内部也可以通过一些方式来初始化的设置,属性不能被组件自己更改,但是你可以通过父组件主动重新渲染的方式来传入新的props。这就是React中的单向数据流2.属性的特点属性是描述性质、特点的,组件自己不能随意更改,必须由父组件进行更改......
  • #yyds干货盘点#深度讲解React Props
    一、props的介绍当React遇到的元素是用户自定义的组件,它会将JSX属性作为单个对象传递给该组件,这个对象称之为“props”。函数声明的组件,会接受一个props形参,获取属性传递的参数functionComponentA(props){return<div>我是组件B:{props.value}</div>}如果函数组件需要prop......
  • 28-Vue脚手架-props配置项
    props配置项props让组件接收外部传过来的数据1)传递数据这里需要注意,通过age="18"的方式,传递进去的数据是字符类型的,通过动态绑定:age="26"的方式,传递进去的数据是整型类型<!--这里需要注意,:age="26"代表v-bind动态绑定,传入的age是int类型--><Studentname="马铃薯......
  • react数据管理之setState与Props
    react数据管理之setState与PropssetState调用原理setState是React中用于更新组件状态(state)的方法。它的调用原理可以分为以下几个步骤:状态的改变:当调用setState时,React会将新的状态对象与当前状态对象进行合并(合并过程是浅合并)。React不会直接修改当前状态对象,而是创建一个......
  • 26 组件传递props校验
    基于组件传递,对传输的内容进行校验1.设置默认值default2.必选项require3.传参的类型ps:props是只读的,不能修改......