zoukankan      html  css  js  c++  java
  • 数据管理工具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进行改变

    image

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

    2. Redux

    Redux相对于Flux的改进:

    • 把store和Dispatcher合并,结构更加简单清晰

    • 新增state角色,代表每个时间点store对应的值,对状态的管理更加明确

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

    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检测到数据变化自动渲染)
    image
    ps:vuex官方Vue+vuex小demo

    使用数据管理工具的场景

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

  • 相关阅读:
    第十章第二节 阿基米德原理
    python-文件读写操作
    pyqt5-控件的显示与隐藏
    pyqt5-控件是否可用
    使用Visual Studio 2015开发Android 程序
    字节序(byte order)和位序(bit order)
    庖丁解牛-----Live555源码彻底解密(根据MediaServer讲解Rtsp的建立过程)
    H264系列(9):H264中的时间戳(DTS和PTS)
    EMIPLIB简介
    minidump-DMP文件的生成和使用
  • 原文地址:https://www.cnblogs.com/borter/p/11097307.html
Copyright © 2011-2022 走看看