vue、react对比

redux : vuex
Redux 的组成
Store:存储应用的状态 – state 以及用于触发 state 更新的 dispatch 方法等,整个应用仅有单一的 Store。Store 中提供了几个管理 state 的 API:
store.getState():获取当前 state
store.dispatch(action):触发 state 改变(唯一途径)
store.subscribe(listener):设置 state 变化的监听函数(若把视图更新函数作为 listener 传入,则可触发视图自动渲染)
Action:同 Flux ,Action 是用于更新 state 的消息对象,由 View 发出
有专门生成 Action 的 Action Creator,其本质上是一个返回 Action 对象的函数
Reducer:是一个根据 action.type 更新 state 并返回 nextState 替换原来的 state 的同步的纯函数(对于相同的参数返回相同的返回结果,不修改参数,不依赖外部变量)。即通过应用状态与 Action 推导出新的 state:(previousState, action) => newState。Reducer 返回一个新的 state
整体流程为:Action Creator => action => store.dispatch(action) => reducer(state, action) => state = nextState。

Redux 的特点
单向数据流。View 发出 Action (store.dispatch(action)),Store 调用 Reducer 计算出新的 state ,若 state 产生变化,则调用监听函数重新渲染 View (store.subscribe(render))
单一数据源,只有一个 Store
state 是只读的,每次状态更新之后只能返回一个新的 state
没有 Dispatcher ,而是在 Store 中集成了 dispatch 方法,store.dispatch() 是 View 发出 Action 的唯一途径
支持使用中间件(Middleware)管理异步数据流

Vuex 的核心概念
Store:Vuex 采用单一状态树,每个应用仅有一个 Store 实例,在该实例下包含了 state, actions, mutations, getters, modules
State:Vuex 为单一数据源
可以通过 mapState 辅助函数将 state 作为计算属性访问,或者将通过 Store 将 state 注入全局之后使用 this.$store.state 访问
State 更新视图是通过 vue 的双向绑定机制实现的
Getter:Getter 的作用与 filters 有一些相似,可以将 State 进行过滤后输出
Mutation:Mutaion 是 vuex 中改变 State 的唯一途径(严格模式下),并且只能是同步操作。Vuex 中通过 store.commit() 调用 Mutation
Action:一些对 State 的异步操作可以放在 Action 中,并通过在 Action 提交 Mutaion 变更状态
Action 通过 store.dispatch() 方法触发
可以通过 mapActions 辅助函数将 vue 组件的 methods 映射成 store.dispatch 调用(需要先在根节点注入 store)
Module:当 Store 对象过于庞大时,可根据具体的业务需求分为多个 Module ,每个 Module 都具有自己的 state 、mutation 、action 、getter

Vuex 的特点:
单向数据流。View 通过 store.dispatch() 调用 Action ,在 Action 执行完异步操作之后通过 store.commit() 调用 Mutation 更新 State ,通过 vue 的响应式机制进行视图更新
单一数据源,和 Redux 一样全局只有一个 Store 实例
只能应用于 Vue

Redux
  • 核心对象:store
  • 数据存储:state
  • 状态更新提交接口:dispatch
  • 状态更新提交参数:带type和payload的Action
  • 状态更新计算:reducer
  • 限制:reducer必须是纯函数,不支持异步
  • 特性:支持中间件
VUEX
  • 核心对象:store
  • 数据存储:state
  • 状态更新提交接口:commit
  • 状态更新提交参数:带type和payload的mutation提交对象/参数
  • 状态更新计算:mutation handler
  • 限制:mutation handler必须是非异步方法
  • 特性:支持带缓存的getter,用于获取state经过某些计算后的值
Redux vs VUEX 对比分析

store和state是最基本的概念,VUEX没有做出改变。其实VUEX对整个框架思想并没有任何改变,只是某些内容变化了名称或者叫法,通过改名,以图在一些细节概念上有所区分。

  • VUEX弱化了dispatch的存在感。VUEX认为状态变更的触发是一次“提交”而已,而调用方式则是框架提供一个提交的commit API接口。
  • VUEX取消了Redux中Action的概念。不同于Redux认为状态变更必须是由一次"行为"触发,VUEX仅仅认为在任何时候触发状态变化只需要进行mutation即可。Redux的Action必须是一个对象,而VUEX认为只要传递必要的参数即可,形式不做要求。
  • VUEX也弱化了Redux中的reducer的概念。reducer在计算机领域语义应该是"规约",在这里意思应该是根据旧的state和Action的传入参数,“规约"出新的state。在VUEX中,对应的是mutation,即"转变”,只是根据入参对旧state进行"转变"而已。

总的来说,VUEX通过弱化概念,在任何东西都没做实质性削减的基础上,使得整套框架更易于理解了。

另外VUEX支持getter,运行中是带缓存的,算是对提升性能方面做了些优化工作,言外之意也是鼓励大家多使用getter。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值