vue单向数据流

一、单向数据流

 数据一般从父组件传到子组件,子组件没有权利直接修改父组件传来的数据,即子组件从 props中直接获取的数据,只能使用$emit发出一个事件,请求父组件修改数据再传给子组件。父级属性值的更新会下行流动到子组件中。每次父级组件发生更新时,子组件中所有的 prop 都将会刷新为最新的值。这就是单向数据流 (数据流指的是组件之间的数据流动)。

虽然vue有双向绑定v-model,但是vue和react父子组件之间数据传递,仍然还是遵循单向数据流的,父组件可以向子组件传递props,但是子组件不能修改父组件传递来的props,子组件只能通过事件通知父组件进行数据更改,如图所示:

子组件只能通过$meit发出事件,通知父组件修改数据

优点:是所有状态的改变可记录、可跟踪,源头易追溯; 所有数据只有一份,组件数据只有唯一的入口和出口,使得程序更直观更容易理解,有利于应用的可维护性。

二、单向数据流和双向数据绑定区别

单向数据流在 Vue 中实际表现就是:当 Model 中的 data 发生变化的时候会单向修改 View 中的值,而 View 中的值发生变化的时候,Model 不会感知。实际应用就是 v-bind 单向数据。

双向数据绑定就是多了 View 变化会通知到 Model 层。即 MVVM 的具体实现。无论 Model 还是 View 中的值发生变化,都会通过 ViewModel 通知到对方,实现同步。实际应用就是 v-model 双向数据绑定。 


三、总结

单向数据流是通过 props 将 Model 层的变化通知到 View 层进行修改。
双向数据绑定是通过 Object.defineProperty()的 set() 和 get() 方法来实现的,当某一方发生变化的时候,另一方就会收到更新值的提醒,从而实现数据同步变化。

猜你喜欢

转载自blog.csdn.net/qq_34402069/article/details/128980547