孙卫琴的《精通Vue.js》读书笔记-Vue组件的单向数据流

本文基于《精通Vue.js》探讨Vue框架的单向数据流原则,阐述如何从父组件向子组件传递属性并保持数据同步,同时介绍如何在子组件中初始化数据和定义计算属性以实现独立更新。

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

本文参考孙卫琴,杜聚宾所创作的 <<精通Vue.js: Web前端开发技术详解>>一书
在这里插入图片描述
为了简化组件的数据传递过程,避免因为在某个组件中随意修改数据而出现混乱,Vue框架提供了以下建议:
(1)单向传递组件的属性,即由父组件把属性值传递给子组件的属性。
(2)在子组件中不随意修改由父组件传入的对象或数组类型的属性的内容。
在例程1的oneflow.html中,根组件在自己的模板中会把变量data1和data2传给子组件的属性v1和v2。

例程1 oneflow.html

    <div id="app">
      <input v-model.number="data1"/>
      <input v-model.number="data2"/>
      <add :v1="data1"  :v2="data2"></add>
    </div>

    <script>
      const addComponent={
        props:['v1','v2'],
        template: '<div>{{v1}}+{{v2}}={{v1+v2}}</div> '
      }
      const app=Vue.createApp({
        data(){
          return {data1:10,data2:20}
        },
        components: {  
          'add' : addComponent  
        }
      })

      const vm=app.mount('#app')
   </script>

通过浏览器访问oneflow.html,会得到如图1所示的网页。
在这里插入图片描述

图1 oneflow.html的网页

如果在oneflow.html的网页的输入框输入新的数字,根组件的data1和data2变量会发生更新,组件的v1和v2属性也会被同步更新。由此可见,当父组件的变量与子组件的属性绑定后,如果父组件的变量发生更新,那么子组件的属性会同步更新。
子组件获得了父组件传入的属性值后,如果仅仅把它作为初始值,以后还需要做独立于父组件的特定的更新,或者需要依据子组件的属性推算出其他数据,该怎么办呢?Vue框架提供了以下解决方案:
(1)把属性作为初始值赋值给子组件中由data选项定义的变量。
(2)定义一个计算属性,它的取值由子组件的属性推算出来。

例如可以把oneflow.html中的addComponent组件的定义内容的代码改写为:

      const addComponent={
        props:['v1','v2'],
        data(){
          return {
            d1:this.v1, d2: this.v2
          }
        },
        computed: {  //计算属性
          sum(){  
            return this.v1+this.v2
          } ,
          remainder(){
            return this.d1-this.d2
          }
        },
        template: `<div>{{v1}}+{{v2}}={{sum}}</div>
                         <div>{{d1}}-{{d2}}={{remainder}}</div> `

      }

以上d1和d2变量的初始值为v1和v2属性。尽管Vue不允许在addComponent组件中修改v1和v2属性,但是允许对d1和d2变量做任意的修改。sum计算属性的取值来自于v1和v2属性的和,remainder计算属性的取值来自于d1和d2变量的差。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java技术集锦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值