单向数据流 和 Vuex 简介

作者: 前端GoGoGo7 | 来源:发表于2017-04-16 16:50 被阅读2550次

随着前端的项目的越来越复杂,出现了一堆概念来降低开发的复杂性。单向数据流就是其中一个。

如果项目很简单,不需要用单向数据流。

单向数据流是什么

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

单向数据流的极简示意

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

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

单向数据流的使用场景

多个组件会共享状态时,共享状态和组件间(兄弟组件)通信变的不容易。我们把共享状态抽取出来,用单向数据流的方式会变得容易。

Vuex 简介

Vuex 是适用于 Vue.js 应用的状态管理库,为应用中的所有组件提供集中式的状态存储与操作,保证了所有状态以可预测的方式进行修改。

Vuex 是单向数据流的一种实现。

核心概念

State

State 用来存状态。在根实例中注册了store 后,用 this.$store.state 来访问。

Getters

Getters 从 state 上派生出来的状态。可以理解为基于 State 的计算属性。很多时候,不需要 Getters,直接用 State 即可。

Mutations

Mutations 用来改变状态。需要注意的是,Mutations 里的修改状态的操作必须是同步的。在根实例中注册了 store 后, 可以用 this.$store.commit('xxx', data) 来通知 Mutations 来改状态。

Actions

Actions 通过调用 Mutations 来改状态。Actions 可以包含异步操作。在根实例中注册了 store 后, 可以用 this.$store.dispatch('xxx', data) 来存触发 Action。

Vuex 的完整流程

组件中触发 Action,Action 提交 Mutations,Mutations 修改 State。 组件根据 State 或 Getters 来渲染页面。具体如下图

最后,推荐下 Vue 的官方调试工具 devtools extension,它提供了 time-travel 调试、状态快照导入导出等高级调试功能。下图是 time-travel 功能的 Demo:

相关文章

  • 单向数据流 和 Vuex 简介

    随着前端的项目的越来越复杂,出现了一堆概念来降低开发的复杂性。单向数据流就是其中一个。 如果项目很简单,不需要用单...

  • vuex简单讲解

    vue 理解vuex我们先来认识下vue Vue是单向数据流,v-model只是语法糖而已。单向数据流就是:数据总...

  • 一张图了解vuex的运行机制

    vuex独立的提供响应式数据的。 运行机制:单向数据流。 vuex提供数据(state)来驱动视图(vue com...

  • vuex相关

    1. 从vuex中取的数据,不能直接更改,单向数据流 需要浅拷贝对象之后更改,否则报错; 2. vuex中的数据在...

  • vuex

    Vuex采用和Redux类似的单向数据流的方式来管理数据。用户界面负责触发动作(Action)进而改变对应状态(S...

  • 常见vue面试题

    1. 解释单向数据流和双向数据绑定单向数据流: 数据流是单向的。数据流动方向可以跟踪,流动单一,追查问题的时候可以...

  • RAC双向绑定

    简介 在 ReactiveObjC 中,根据数据流的方向,我们可以划分出两种不同数据流,即:单向数据流,如:RAC...

  • Vuex入门

    (1)简单的页面中使用单向数据流 (2)vuex的流程图 (3)store 由于 store 中的状态是响应式的,...

  • Vue 中的双向数据绑定

    双向绑定 单向数据流 双向绑定 or 单向数据流 Vue 是单向数据流,不是双向绑定 Vue 的双向绑定是语法糖 ...

  • 双向数据绑定和单向数据流区别

    双向数据绑定和单向数据流区别 单向数据绑定优缺点:优点:单向数据流,所有状态变化都可以被记录、跟踪,状态变化通过手...

网友评论

本文标题:单向数据流 和 Vuex 简介

本文链接:https://www.haomeiwen.com/subject/pzvaattx.html