我的编程空间,编程开发者的网络收藏夹
学习永远不晚

vue单向数据流的深入理解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

vue单向数据流的深入理解

官网解释

所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外变更父级组件的状态,从而导致你的应用的数据流向难以理解。额外的,每次父级组件发生变更时,子组件中所有的 prop 都将会刷新为最新的值。这意味着你不应该在一个子组件内部改变 prop。如果你这样做了,Vue 会在浏览器的控制台中发出警告。

单向数据流是什么

单向数据流指只能从一个方向来修改状态。下图是单向数据流的极简示意:

与单向数据流对对应的是双向数据流(也叫双向绑定)。在双向数据流中,Model(可以理解为状态的集合) 中可以修改自己或其他Model的状态, 用户的操作(如在输入框中输入内容)也可以修改状态。这使改变一个状态有可能会触发一连串的状态的变化,最后很难预测最终的状态是什么样的。使得代码变得很难调试。如下图所示:

与双向数据流比,在单向数据流中,当你需要修改状态,完全重新开始走一个修改的流程。这限制了状态修改的方式,让状态变得可预测,容易调试。

示例

我们通过一个示例来解释单向数据流与双向绑定,这个示例是对ant-design-vue表单组件的二次封装

a-input原始用法

<template>
    <a-input v-model='data'/>
</template>

<script>
export default {
    data() {
        return {
            data: ''
        }
    }
}
</script>

在data中声明的属性会通过Object.definePropty方法为其添加get和set方法,使其成为响应式数据。v-model是一个语法糖,在vue 2.2.0版本后新增了model属性

官方解释

允许一个自定义组件在使用 v-model 时定制 prop 和 event。默认情况下,一个组件上的 v-model 会把 value 用作 prop 且把 input 用作 event,但是一些输入类型比如单选框和复选框按钮可能想使用 value prop 来达到不同的目的。使用 model 选项可以回避这些情况产生的冲突。

我们利用这个属性来对上述input组件做二次封装

组件代码

<template>
    <a-input :value='currentValue' @change='onInputChange'/>
</template>

<script>
export default {
    data() {
        return {
            currentValue: this.value
        }
    },
    
    model: {
        event: 'change',
        prop: 'value'
    },
    props:{
        value: {
            type: String
        }
    },
    watch: {
        value: {
            handler(newVal) {
                this.currentValue = newVal
            }
        }
    },
    
    onInputChange(e) {
        this.$emit('change', e.target.value)
    }
}
</script>

在父组件中使用

<template>
    <my-input v-model='data' />
</template>

<script>
export default {
    data() {
        return {
            data:''
        }
    }
}
</script>

上述子组件中的currentValue是实际input组件的值,他的值是根据父组件传入的值得出的,input标签组件的change事件来触发父组件的change事件,从而改变传入子组件props中value的值。这就解释了单项数据流,父組件通过props向子组件传递值,子组件通过emit事件来通知父组件修改值,子组件不在自身对父组件传递过来的props做任何修改,都是通过父组件来更新props,从而达到子组件更新自身状态。

使用场景

当我们在实现一个由数据渲染的复杂表单时,那么我们的设计就可以采用这种模式,通过props以及emit传递,保证子组件的事件触发根节点的数据更新,从而更新子孙组件的状态。

总结

到此这篇关于vue单向数据流的文章就介绍到这了,更多相关vue单向数据流内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

vue单向数据流的深入理解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

vue数据流是单向吗

是单向的。虽然vue有双向绑定“v-model”,但是vue父子组件之间数据传递,仍然还是遵循单向数据流的,父组件可以向子组件传递props,但是子组件不能修改父组件传递来的props,子组件只能通过事件通知父组件进行数据更改。
2023-05-14

vue数据流是不是单向的

本文小编为大家详细介绍“vue数据流是不是单向的”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue数据流是不是单向的”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。是单向的。虽然vue有双向绑定“v-model
2023-07-04

Vue的双向绑定和单向数据流有没有冲突

这篇“Vue的双向绑定和单向数据流有没有冲突”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue的双向绑定和单向数据流有没有
2023-06-29

Vue双向数据绑定与响应式原理深入探究

本节介绍双向数据绑定以及响应式的原理,回答了双向数据绑定和数据响应式是否相同,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2022-11-13

vue中的单项数据流和双向数据绑定冲不冲突

这篇“vue中的单项数据流和双向数据绑定冲不冲突”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue中的单项数据流和双向数据
2023-06-30

VUE 观察者:深入理解数据绑定的工作原理

Vue.js 中的观察者设计模式是数据绑定的关键,它允许组件响应数据的变化并更新视图。本文将深入探讨观察者的工作原理,包括如何监听数据、如何触发更新以及如何优化性能。
VUE 观察者:深入理解数据绑定的工作原理
2024-02-10

深入nodejs中流(stream)的理解

nodejs的fs模块并没有提供一个copy的方法,但我们可以很容易的实现一个,比如:var source = fs.readFileSync('/path/to/source', {encoding: 'utf8'}); fs.write
2022-06-04

深入了解Lotus-Notes数据库向ORACLE数据迁移

目前的办公自动化产品(以下简称OA)中,即将或已经面对的大量客户,存在将原Domino版本系统向JAVA版本系统升级的需求,势必包括Domino系统内数据向JAVA版本系统中的数据迁移的要求。数据迁移中,由于Domino系统使用的数据库:Lotus-Notes不是关系型数据库,而是文件型数据库,大大增加了数据迁移的难度。通过分析和实践,确定选择以数据对象映射的方式,由产品部门进行工具开发,通过实施人员对工具的配置和使用,最终达到准确完整实现数据迁移的目标。编程学习网教育
深入了解Lotus-Notes数据库向ORACLE数据迁移
2024-04-23

编程热搜

目录