如下內容會嚴格遵循下面三個觀點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
愛不釋手,那仍是開啓嚴格模式,再加上一套狀態管理的規範吧。