如何解决Vue.js 中props单向数据流传值问题

前言

  官网对props的定义:props 可以是数组或对象,用于接收来自父组件的数据。props 可以是简单的数组,或者使用对象作为替代,对象允许配置高级选项,如类型检测、自定义验证和设置默认值。

特性

单项数据流:

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

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

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

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

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

2.这个 prop 以一种原始的值传入且需要进行转换。在这种情况下,最好使用这个 prop 的值来定义一个计算属性

props: ['size'],
computed: {
  normalizedSize: function () {
    return this.size.trim().toLowerCase()
  }
}

注意:**在 JavaScript 中对象和数组是通过引用传入的,所以对于一个数组或对象类型的 prop 来说,在子组件中改变变更这个对象或数组本身将会影响到父组件的状态。

还有我们在vue组件中要写一个弹框镶嵌到父组件中,就要利用到组件通信,父传子,子传父

<template>
<---父组件---->
<father-data @closepopup="closepopup" ></father-data>
<popups></popups>

</template>


<-----子组件---->
<template>

<popup @click="showpopups" ></popup>

</template>
<script>

export default {
    props:{
     showpopup:{
    type:Boolean,
    default:false
        }
    }
}
methods:{
showpopups(){
this.$emit("closepopup")

}
}
</script>

 

 

 

 

 

 

 

Guess you like

Origin blog.csdn.net/weixin_47389477/article/details/112257377