Vue基础-14-单向数据流

单向数据流:是Vue中prop提出的一个概念

组件参数传递的时候,可以用props来传递参数,但是不能修改props的值,过程就称为单向数据流

Vue官方解释:

所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。

简单说:Vue中我们数据流只能父组件流向子组件。不能直接修改数据流,传递回父组件。自定义事件的方式让组组件主动修改数据。

 
  1. <template>
    <div>
    <p>{{ msg }}</p>
    <p>{{newUser}}</p>
    <button @click="msg = '小飞'">修改</button>
    </div>
    </template>
    
    <script>
    export default {
    props: ["msg"]
    
    };
    </script>
    
    <style>
    </style>

如果你直接修改props的值,会出现一下的问题

props数据修改方案

我们可以使用watch的方发来监控数据

 
  1. <template>
    <div>
    <p>{{ msg }}</p>
    <p>{{newUser}}</p>
    <input type="text" v-model="newUser.name">
    <button @click="msg = '小飞'">修改</button>
    //直接修改对象的属性值,虽然页面不会提示警告,也违反了单向数据流,不推荐写法
    <button @click="user.name = '小飞'">修改user</button>
    </div>
    </template>
    
    <script>
    export default {
    props: ["msg","user"],
    data(){
    return{
    newUser:{
    name:""
    }
    }
    },
    watch:{
    user:{
    handler(){
    this.newUser = {...this.user}
    },
    deep:true,
    immediate:true
    }
    }
    };
    </script>
    
    <style>
    </style>

计算属性也能实现对props的数据更新

 
  1. export default {
    props: ["msg","user"],
    // computed:{
    // newUser(){
    // return {...this.user}
    // }
    // }
    };

为了保证每次父组件的数据更新,也能动态获取

 
  1. export default {
    props:["user"]
    data(){
    return{
    newData:{}
    }
    }
    create(){
    this.newData = user
    }
    }

组件第一次加载的能获取user的数据,以后数据变化,子组件无法更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值