专栏首页Young Dreamer数据管理工具Flux、Redux、Vuex的区别

数据管理工具Flux、Redux、Vuex的区别

为什么要进行数据管理?

组件式开发的核心思路是MVC,Model层的数据发生变化,驱动View层的视图发生变化。试想一个场景,如果ModelA触发ModelB变化,导致ViewB发生变化,ViewB发生变化时,触发了ModelC变化,ModelC又触发了其他Model的变化...,我们想知道一个View的变化究竟是那个数据导致的,追查起来就很困难,于是就记录数据的变化就很有必要了,其实换一个高大上的名字就是数据状态管理。

怎么有效地进行数据管理?

1. 数据集中管理 view中的数据统一放置到一个仓库(store)中,要渲染页面的时候,从中取出当前状态的数据(state),然后将state中的最新的数据通过props传递到组件中,然后渲染组件,实现试图展现。

2. 精细化拆解数据操作 要修改store中的state,为了做到数据的操作可追溯,尽量将数据的操作拆解成一个个小函数,当然纯函数最好。

3. 单向数据驱动 组件中不能直接修改state的值,修改state,只能发出修改请求(action),由action触发数据操作。

总之,数据集中管理就需要应用使用唯一的数据Tree,存放在store中;精细化拆解数据操作就是需要提供小而纯的函数,来修改state;单就向数据驱动需要提供唯一能修改state的渠道

数据管理工具

1. Flux

Flux数据流的顺序是: View发起Action->Action传递到Dispatcher->Dispatcher将通知Store->Store的状态改变通知View进行改变

ps:基于Flux架构思想写的一个小demo

2. Redux

Redux相对于Flux的改进:

  • 把store和Dispatcher合并,结构更加简单清晰
  • 新增state角色,代表每个时间点store对应的值,对状态的管理更加明确

Redux数据流的顺序是: View调用store.dispatch发起Action->store接受Action(action传入reducer函数,reducer函数返回一个新的state)->通知store.subscribe订阅的重新渲染函数

ps:阮一峰老师的Redux+React小demo

3. Vuex

Vuex是专门为Vue设计的状态管理框架, 同样基于Flux架构,并吸收了Redux的优点 Vuex相对于Redux的不同点有:

  • 改进了Redux中的Action和Reducer函数,以mutations变化函数取代Reducer,
  • 无需switch,只需在对应的mutation函数里改变state值即可
  • 由于Vue自动重新渲染的特性,无需订阅重新渲染函数,只要生成新的State即可

Vuex数据流的顺序是: View调用store.commit提交对应的请求到Store中对应的mutation函数->store改变(vue检测到数据变化自动渲染)

ps:vuex官方Vue+vuex小demo

使用数据管理工具的场景

数据管理主要是方便SPA开发时,管理多个组件或子页面的公用数据,如果仅仅是简单个的单页,您最好不要使用Redux或Vuex。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • vue归纳笔记:对vue中nextTick()的理解及应用场景说明

    请记住:vue是依靠数据驱动视图更新的,该更新的过程是异步的。即:当侦听到你的数据发生变化时, Vue将开启一个队列(该队列被Vue官方称为异步更新队列)。视图...

    用户1272076
  • jQuery动态改变Input/Textarea值Vuejs数据没有绑定的解决办法

    大概的意思是Vue只监听浏览器原生事件,而jQuery改变输入框的值属于jQuery定义的事件,这个Vue是无法监听到的。

    飞奔去旅行
  • 【前端词典】Vue 响应式原理其实很好懂

    这是十篇 Vue 系列文章的第三篇,这篇文章我们讲讲 Vue 最核心的功能之一:响应式原理。

    小生方勤
  • [现场实录] VueConf 2019 尤雨溪演讲总结

    Chrome DevTools 有约 90 万的周活用户,React 相比有 160 万。Evan 推荐用 Chrome DevTools 来预测 Vue 的项...

    ConardLi
  • 尤雨溪 6 月 4 日的 Vue 技术分享

    Vue 团队成员简介:https://vuejs.org/v2/guide/team.html

    夜尽天明
  • Vue开发环境搭建

    nodejs中集成了npm 因此需要安装nodejs,官方地址是https://nodejs.org/en/ 查看当前npm版本

    羊羽shine
  • Vuejs中父组件主动调用子组件的方法

    我们都知道,vue是单向流,但是有时候我们需要在父组件中主动通知子组件一些信息,使其做出一些响应变化,那么如何在父组件中去主动调用子组件的方法呢?Vue当然给我...

    飞奔去旅行
  • vscode

    2019年6月11日 ⋅ 浏览量: 3    ...

    晴天Online
  • Vue 2.x折腾记 - (22) Vue 打包图片在safari不显示的问题

    图片不显示这个问题在safari上会出现,不管是PC还是手机端,而其他浏览器是可以正常预览

    CRPER
  • Vue3.0 组件的核心概念_插槽

    Vue 在 2.6 版本中,对插槽使用 v-slot 新语法,取代了旧语法的 slot 和 slot-scope,并且之后的 Vue 3.0 也会使用新语法,这...

    Nian糕

扫码关注云+社区

领取腾讯云代金券