P14. vue3 向子组件传值 Prop

数字拾光者
• 阅读 727

从父组件Content向子组件Hello_kugou传递数据

  • App.vue
<script>
  import Content from "./components/Content.vue";
  export default {
    data() {
      return {

      };
    },
    components:{
      Content
    }
  }

</script>

<template>
  <div>
    <Content></Content>

  </div>

</template>


  • Content.vue
<template>
  <div>
    <!--组件是可以复用 -->
    <Hello_kugou :message="msg" static="123"></Hello_kugou>
    <h3>{{msg}}</h3>
    <button @click="msg='酷狗'"> chagebut</button>

  </div>
</template>

<script>
const obj={
  msg:"hello---kugou"
}

import Hello_kugou from "./Hello_kugou.vue";
export default {
  data(){//让每一个组件对象都返回一个对象,不对数据污染
    return{
      msg: 'hellokugoumsg'
    };
  },
  components:{
    Hello_kugou
  },
  name: "Content"
}
</script>

<style scoped>

</style>
  • Hello_kugou.vue
<template>
  <div>
    <h2>hello kugou</h2>
    <h2>{{message}}--调用父组件的变量</h2>
    <h2>{{static}}--调用父组件的静态变量</h2>
  </div>
</template>

<script>
export default {
  name: "Hello_kugou",
  props: ['message', 'static']
}
</script>

<style scoped>

</style>

P14. vue3 向子组件传值 Prop

  • 静态变量

P14. vue3 向子组件传值 Prop

Prop 类型

到这里,我们只看到了以字符串数组形式列出的 prop:

props: ['title', 'likes', 'isPublished', 'commentIds', 'author']

但是,通常你希望每个 prop 都有指定的值类型。这时,你可以以对象形式列出 prop,这些 property 的名称和值分别是 prop 各自的名称和类型:

props: {
  title: String,
  likes: Number,
  isPublished: Boolean,
  commentIds: Array,
  author: Object,
  callback: Function,
  contactsPromise: Promise // or any other constructor
}

这不仅为你的组件提供了文档,还会在它们遇到错误的类型时从浏览器的 JavaScript 控制台提示用户。你会在这个页面接下来的部分看到类型检查和其它 prop 验证。

prop 类型限制

  • Content.vue

    <template>
    <div>
      <!--组件是可以复用 -->
      <Hello_kugou :message="msg" static=56></Hello_kugou>
      <h3>{{msg}}</h3>
      <button @click="msg='酷狗'"> chagebut</button>
    
    </div>
    </template>
    
    <script>
    const obj={
    msg:"hello---kugou"
    }
    
    import Hello_kugou from "./Hello_kugou.vue";
    export default {
    data(){//让每一个组件对象都返回一个对象,不对数据污染
      return{
        msg: 'hellokugoumsg'
      };
    },
    components:{
      Hello_kugou
    },
    name: "Content"
    }
    </script>
    
    <style scoped>
    
    </style>
  • Hello_kugou.vue
<template>
  <div>
    <h2>hello kugou</h2>
    <h2>{{message}}--调用父组件的变量</h2>
    <h2>{{static}}--调用父组件的静态变量</h2>
  </div>
</template>

<script>
export default {
  name: "Hello_kugou",
  //props: ['message', 'static']
  props:{
    message: String,
    static: String
  }
}
</script>

<style scoped>

</style>

P14. vue3 向子组件传值 Prop

prop 默认值

  • Hello_kugou.vue
<template>
  <div>
    <h2>hello kugou</h2>
    <h2>{{message2}}--调用父组件的变量</h2>
    <h2>{{static}}--调用父组件的静态变量</h2>
  </div>
</template>

<script>
export default {
  name: "Hello_kugou",
  //props: ['message', 'static']
  props:{
    // message: String,//类型限制
    // static: String
    message2:{
      type:String,
      default:"nihhaokugou",
      required:true
    }
  }
}
</script>

<style scoped>

</style>

P14. vue3 向子组件传值 Prop

  • required:true 必须传值
    P14. vue3 向子组件传值 Prop

数组,对象情况p

  • Content.vue
<template>
  <div>
    <!--组件是可以复用 -->
    <Hello_kugou :message="msg" static=56 :list="list"></Hello_kugou>
    <h3>{{msg}}</h3>
    <button @click="msg='酷狗'"> chagebut</button>

  </div>
</template>

<script>
const obj={
  msg:"hello---kugou"
}

import Hello_kugou from "./Hello_kugou.vue";
export default {
  data(){//让每一个组件对象都返回一个对象,不对数据污染
    return{
      msg: 'hellokugoumsg',
      list: [1,2,3]
    };
  },
  components:{
    Hello_kugou
  },
  name: "Content"
}
</script>

<style scoped>

</style>
  • Hello_kugou.vue

<template>
  <div>
    <h2>hello kugou</h2>
    <h2>{{message2}}--调用父组件的变量</h2>
    <h2>{{static}}--调用父组件的静态变量</h2>
  </div>
</template>

<script>
export default {
  name: "Hello_kugou",
  //props: ['message', 'static']
  props:{
    // message: String,//类型限制
    // static: String
    message2:{
      type:String,
      default:"nihhaokugou",
      required:true
    },
    list:{
      type:Array,
      default(){
        return []
      }
    }
  }
}
</script>

<style scoped>

</style>

单项数据流

所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外变更父级组件的状态,从而导致你的应用的数据流向难以理解。

额外的,每次父级组件发生变更时,子组件中所有的 prop 都将会刷新为最新的值。这意味着你不应该在一个子组件内部改变 prop。如果你这样做了,Vue 会在浏览器的控制台中发出警告。

这里有两种常见的试图变更一个 prop 的情形:

这个 prop 用来传递一个初始值;这个子组件接下来希望将其作为一个本地的 prop 数据来使用。在这种情况下,最好定义一个本地的 data property 并将这个 prop 用作其初始值:

props: ['initialCounter'],
data: function () {
  return {
    counter: this.initialCounter
  }
}


点赞
收藏
评论区
推荐文章
晴空闲云 晴空闲云
3年前
vue3中基于script setup语法糖的$refs使用
在用vue3开发项目的时候,需要调用子组件的方法,于是想着用$refs来实现,但是我是使用scriptsetup语法糖,原先vue2的语法已经不适用了。于是一番折腾和查阅资料,终于搞定。vue2语法vue2语法在组件上设置ref属性后,在代码里可以通过this.$refs.ref值访问到对应的子组件。一个设置ref值的组件:html在js代码中可以通
Alex799 Alex799
4年前
vue最新面试题
最近在面试,总结几个重点的面试题:一、vue父子组件之间的传值:简单来说,子组件通过props方法接受父组件传来的值,子组件通过$emit方法来向父组件发送数据。(具体案例可以看我之前写的博客)。二、vue生命周期函数:beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedbeforeDestr
Chase620 Chase620
4年前
vue的8种通信方式
1.props/emit1.父组件向子组件传值下面通过一个例子说明父组件如何向子组件传递数据:在子组件article.vue中如何获取父组件section.vue中的数据articles:\'红楼梦','西游记','三国演义'\//section父组件<template<divclass"section"
爱丽丝13 爱丽丝13
4年前
React 组件通信之发布订阅模式
React通信react的数据流是单向的,react通信有以下几种方式:父向子通信:传入props子向父通信:父组件向子组件传一个函数,然后通过这个函数的回调,拿到子组件传过来的值父向孙通信:利用context传值。React.createContext()兄弟间通信:​1、找一个相同的父组件,既可以用pr
Chase620 Chase620
4年前
Vue方向:prop验证
我们可以为组件的prop指定验证规则,如果传入的数据不符合要求,Vue会发出警告,这对于开发给他人使用的组件非常有用。要指定验证规则,需要用对象的形式来定义prop,而不能用字符串数组;1、验证父组件传递过来的数据类型props选项值如果为数据,则表示只是单纯的罗列父组件传递过来的数据而已如果props选项的值是一个对象,那么表示要验证接收的
Dax Dax
3年前
Vue父子组件
几种常见的通信方式:1、prop属性父组件通过绑定属性的方式,给子组件传值,同时子组件通过设置props来接收letChildVue.extend(template:'content',props:content:type:String,default:()r
Chase620 Chase620
4年前
关于:父组件中的子组件中的子组件(孙级)添加数据后怎么样去调用父组件中的方法呢?
1、需求引入image.png这是父组件下的子组件的子组件,一个绑定子设备的弹出窗modal,那么我们怎么样在这个组件中选中子设备后点击确定时去触发父组件的父组件的table列表数据刷新呢?image.pngimage.pngimage.png组件的层级关系.png上述的图示便是部分代码的展示,一般的组件传值有父组件传子组件(
Stella981 Stella981
3年前
React的单向数据流与组件间的沟通
今天来给大家总结下React的单向数据流与组件间的沟通。首先,我认为使用React的最大好处在于:功能组件化,遵守前端可维护的原则。先介绍单向数据流吧。React单向数据流:React是单向数据流,数据主要从父节点传递到子节点(通过props)。如果顶层(父级)的某个props改变了,React会重渲染所有的子节点。刚才我们提到了
Stella981 Stella981
3年前
FLutter父子组件通信
本文介绍flutter父子组件数据传递和回调.还是以之前的代码为例Flutter\_DayByDay(https://gitee.com/Royce_he/Flutter_DayByDay)由于之前用ReactNative写项目,顺便对比一下RN父组件直接在xml标签中写属性{值/方法},子组件通过props去取属性和方法
昔不亏 昔不亏
8个月前
陈杨 陈杨
1个月前
鸿蒙5开发宝藏案例分享---应用性能优化指南
Column()Child(msg:this.message)//通过@Prop传递@ComponentstructChild@Propmsg:string;//子组件接收build()Text(this.msg)精准刷新监听:用@Watch监听数据变化,
数字拾光者
数字拾光者
Lv1
泉眼无声惜细流,树阴照水爱晴柔。小荷才露尖尖角,早有蜻蜓立上头。
文章
6
粉丝
0
获赞
0