如下内容会严格遵循下面三个观点javascript
为何这两个库能够被用来对比vue
都是状态管理库,用来管理应用的内部状态java
通常都会被用到
react
中,虽说这并非必须的,你固然也能够用到vue
或者angular
里,可是,大多数状况下,都不会这么作node
在项目之初,你能够选择两者之一来知足你的项目需求,可是到某一天你忽然以为另外一个更和你气味相投,你彻底能够花点时间迁移过去,你会发现,它彷佛也能知足你的那些需求react
学习难度对比:redux
当你须要异步的时候,你不得不考虑
redux-thunk
,你怎么可能不须要异步 想用Promise
,没问题,先看看redux-promise-middleware
怎么样 想搞个日志之类的东西,redux-logger
已经准备好了 当你须要使用state
中的两个值来计算出一个值的时候,你若是稍有代码洁癖,你确定不肯意这样作,这时候,你须要的东西叫作Reselect
...promise
第一波黑的不错,你有没有望而却步app
工做量对比(如下代码直接在nodejs环境下测试):异步
const { createStore } = require('redux')
const ADD = 'ADD'
const initState = {count: 0}
// action
function counter(state = initState, action) {
switch(action.type) {
case ADD:
return {...state, count: state.count + action.payload.count}
default:
return state
}
}
// reducer
const AddOne = () => ({type: ADD, payload: {count:1}})
// store
const store = createStore(counter)
store.subscribe(() => console.log(store.getState()))
setInterval(() => store.dispatch(AddOne()), 1000)
复制代码
不算注释,大约15行左右,那么,mobx想要具有压倒性的优点,应该极力控制本身的大小才对函数
const { observable, autorun } = require('mobx')
const appState = observable({
counter: 0,
add(value){this.counter += value}
})
autorun(() => console.log(appState.counter))
setInterval(() => appState.add(1), 1000)
复制代码
好像只用了7行,约莫是redux实现的一半大
个人天哪,多出了那么多行代码,我还要不要下班了 3. 内存开销对比:
大小只是浮于表面的东西,对于应用更友好的东西,才是核心的要点
redux
的action
的时候,老是须要用到扩展语句
或者Object.assign()
的方式来获得一个新的state
,这一点对于JavaScript
而言是对象的浅拷贝,它对内存的开销确定是大于mobX
中那样直接操做对象属性的方式大得多。这一点比较6,算是一个可被重视的问题
redux
的,那,万一咱们换个视角看看呢mobX
中居然有这样的写法:const {observable} = require('mobx')
const appState = observable({ counter: 0 })
appState.counter += 1
复制代码
直接修改状态?这和react
的理论彻底相悖啊,还怎么和react
搭配使用啊,个人状态万一被同事给悄悄改了但是会引起一场战争的啊,仍是开启严格模式吧。
redux
作的怎么样?试试不经过action
更新一下state
,固然不能成功啊。redux
的基本设计选择了,redux
三大原则:
state
的状态的可管理性,毕竟全部的东西都是泾渭分明的,让出错的可能性和找问题的成本降到了最低。以上,使用mobX
入门简单,构建应用迅速,可是当项目足够大的时候,仍是使用redux
,若是的确对mobX
爱不释手,那仍是开启严格模式,再加上一套状态管理的规范吧。