vue是单向数据流还是双向数据流,vue单向数据流和双向数据流的区别

  vue是单向数据流还是双向数据流,vue单向数据流和双向数据流的区别

  随着前端项目越来越复杂,出现了一堆降低开发复杂度的概念。单向数据流就是其中之一。下面文章主要介绍vue单向数据流的相关信息,通过示例代码非常详细的介绍。有需要的朋友可以参考一下。

  

目录

  官网解释什么是单向数据流。示例a-输入原始用途组件代码用途方案汇总

  

官网解释

  的所有属性在其父属性和子属性之间形成单向向下绑定:父属性的更新将向下流动到子组件,但反之则不然。这将防止子组件意外更改父组件的状态,从而使应用程序的数据流难以理解。此外,每次父组件更改时,子组件中的所有属性都将刷新为最新值。这意味着您不应该在子组件中更改属性。如果您这样做,Vue将在浏览器的控制台中发出警告。

  

单向数据流是什么

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

  单向数据流对对应双向数据流(也叫双向绑定)。在双向数据流中,一个模型(可以理解为状态的集合)可以修改自身或者其他模型的状态,用户的操作(比如在输入框中输入内容)也可以修改状态。这就使得改变一个状态会引发一系列的状态变化,最后很难预测最后的状态会是什么。使代码难以调试。如下图所示:

  与双向数据流相比,在单向数据流中,当你需要修改状态时,完全启动一个修改过的流程。这限制了状态修改的方式,使得状态可预测且易于调试。

  

示例

  我们通过一个例子来说明单向数据流和双向绑定,这个例子是ant-design-vue表单组件的二次封装。

  

a-input原始用法

  模板

  a-输入v-model=data/

  /模板

  脚本

  导出默认值{

  data() {

  返回{

  数据:“”

  }

  }

  }

  /脚本

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

  官方解释

  允许自定义组件在使用v-model时自定义属性和事件。默认情况下,组件上的v-model将使用value作为属性,使用input作为事件,但是一些输入类型(如单选按钮和复选框按钮)可能希望将valueprop用于不同的目的。使用模型选项来避免这些情况引起的冲突。

  我们使用这个属性来第二次封装上面的输入组件。

  

组件代码

  模板

  a-input:value= current value @ change= on input change /

  /模板

  脚本

  导出默认值{

  data() {

  返回{

  当前值:this.value

  }

  },

  型号:{

  事件:“更改”,

  属性:“值”

  },

  道具:{

  值:{

  类型:字符串

  }

  },

  观察:{

  值:{

  处理程序(新值){

  this.currentValue=newVal

  }

  }

  },

  onInputChange(e) {

  这个。$emit(change ,e.target.value)

  }

  }

  /脚本

  在父装配中使用

  模板

  my-input v-model=data /

  /模板

  脚本

  导出默认值{

  data() {

  返回{

  数据:“”

  }

  }

  }

  /脚本

  上述子组件中的currentValue是实际输入组件的值,它的值是根据父组件传入的值得到的。输入标签组件的change事件触发父组件的change事件,从而改变传入的子组件props的值。这解释了单一数据流。父组件通过props将值传递给子组件,子组件通过emit事件通知父组件修改值。子组件不对父组件传递的属性做任何修改,而是通过父组件更新属性,使子组件更新自己的状态。

  

使用场景

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

  

总结

  关于vue单向数据流的这篇文章到此为止。更多关于vue单向数据流的信息,请搜索我们之前的文章或者继续浏览下面的相关文章。希望你以后能支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: