vue中的props

本文介绍了Vue中props的用途、基本用法、静态与动态props、单项数据流原则,以及具名插槽的使用。props允许父组件向子组件传递数据,遵循单向数据流,不应在子组件内修改props。同时提到了具名插槽的定义和使用,增强了组件的灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

StuProps.vue:

<template>
    <div class="props-container">
        <h1>我叫:{{name}}</h1>
        <h2>我今年:{{age}}岁</h2>
        <h3>我是:{{gender}}孩子</h3>
        <h4>我喜欢的食物是:</h4>
      <ul>
        <li v-for="(item,index) in fonds" :key="index">{{item}}</li>
      </ul>
    </div>
  </template>
  
  <script>
  export default {
      name:'PropsCom',
      props:["name","age","gender","fonds"]

  }
  </script>
  
  <style >
  .props-container {
    border: 1px solid orange;
    width: 300px;
    background-color: yellowgreen;
    padding: 10px;
  }
  h1,
  h2,
  h3,
  h4 {
    margin: 0;
  }
  </style>

App.vue:

<StuProps :name="name" :age="age" :gender="gender" :fonds="['西瓜','哈密瓜','冬瓜','傻瓜']"></StuProps>


    <StuProps :name="'金'" :age="8" :gender="'人妖'" :fonds="['西瓜','哈密瓜','冬瓜','傻瓜']"></StuProps>

data() {
    return {
      name:'战神',
      age:18,
      gender:'男',
    
    }
  },

页面效果图;

props的作用:

 props是用于Vue中 父组件 向 子组件 传值的时候使用。

  • props的传递是单向的。
  • 不要在子组件改变props的值。

props的基本用法:

  • 在父组件中的data中定义值
  • 在子组件中使用props声明要引用哪个值
  • 父组件的template中要在子组件标签上绑定
  • 在template模板中,要使用中划线写法;在script脚本中使用小驼峰

 props的定义:

 props:["name","age","gender","fonds"]

静态props:

使用props传递数据包括静态和动态两种形式

  • 在组件中,使用选项props来声明需要从父级接受的数据,props的值可以是字符串数组,也可以是对象。

动态props:

  • 有时候,传递数据并不是直接写死的,而是来自父级的动态数据,这时可以使用指令v-bind来动态绑定props 的值,当父组件的数据变化时,也会传递给子组件。
  • 传递类型:

  • 如果你要直接传递数字、布尔值、数组、对象,而且不使用v-bind指令,传递的仅是字符串类型。

单项数据流:

  • 当父组件的属性变化时,将传导给子组件,但是反过来不会。
  • 每次父组件更新时,子组件的所有 prop 都会更新为最新值。
  • 不要在子组件内部改变 prop。如果你这么做了,Vue 会在控制台给出警告。

在两种情况下,我们很容易忍不住想去修改 prop 中数据:

  1. Prop 作为初始值传入后,子组件想把它当作局部数据来用;
  2. Prop 作为原始数据传入,由子组件处理成其它数据输出。
  • props 是一种单向数据绑定,组件永远不该改变自己的 props 的值,这点很重要。坚守这点的原因有很多。其一是,组件修改 props 会造成程序调试困难。如果一个值被传递进多个子组件,将很难定位这个值是在哪里被修改的。此外,修改 props 会造成组件重新渲染。所以,一个组件里突变的 props 会触发组件重新渲染,这可能会反过来再次触发 props 突变。
     

[slot-具名插槽]

什么叫具名插槽?   就是有名字的插槽。

  • 为什么要用具名插槽?因为一个组件里可能有多个地方都不想写死,那就使用具名插槽。

命名语法:

<slot name= '名字'>默认值</slot>

使用语法:

(依赖template包裹,并且用v-s Lot指定插槽名字)

<template v-S Lot :插槽名>

    要传递的内容

</ template>

简写语法: (把v-S Lot变成#)

<template #插槽名>

    要传递的内容

</ template>

  -- props 设置必传数据(数值不可为空),和属性默认值

用对象的方法定义单个数据:

props: {
        'name': {
            type: String,
            default: '刘德华',
            required: true
        },
        'brith': {
            type: Number
        },
        'age': {
            type: Number
        }
    },

### Vue.js 中 `props` 对象的使用 在 Vue.js 中,组件之间的通信是一个重要概念。父组件可以向子组件传递数据,这通过 `props` 来完成。`props` 是一种自定义属性,在子组件内部被声明并接收来自父级的数据[^3]。 #### 声明 Props 为了使子组件能够接收到传入的信息,需要先在该组件内声明预期获取的 prop 属性名称: ```javascript // 子组件 MyComponent.vue 的 script 部分 export default { name: 'MyComponent', props: ['title', 'likes'] } ``` 上述代码片段展示了如何接受两个名为 `title` 和 `likes` 的 prop 参数。 #### 使用 Prop 数据 一旦声明了这些 prop 后,就可以像访问其他 JavaScript 变量一样轻松地在模板里或计算属性中使用它们: ```html <template> <div class="my-component"> <h2>{{ title }}</h2> <p>Likes: {{ likes }}</p> </div> </template> <script> export default { name: 'MyComponent', props: ['title', 'likes'], }; </script> ``` 这段 HTML 结合了之前提到过的脚本部分,用于展示由父组件传递过来的内容。 #### 父组件传递 Props 为了让子组件能实际获得所需信息,还需要让父组件负责设置具体的 prop 值: ```html <MyComponent :title="'Hello World'" :likes="100"></MyComponent> ``` 这里展示了怎样利用 v-bind (`:`) 将静态字符串 `'Hello World'` 或动态变量赋给子组件中的相应 prop 字段。 #### 完整示例 下面给出一个完整的父子组件交互的例子,其中包含了前面所描述的所有要点: ##### ParentComponent.vue (父组件) ```html <!-- 父组件 --> <template> <div id="app"> <child-component :message="parentMessage" /> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { parentMessage: "This is a message from the parent component." }; } }; </script> ``` ##### ChildComponent.vue (子组件) ```html <!-- 子组件 --> <template> <div> <p>{{ message }}</p> </div> </template> <script> export default { props: ["message"] }; </script> ``` 此案例说明了如何从父组件发送消息到子组件,并且后者成功渲染出了这条信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值