鍍金池/ 問答/Python  HTML/ 使用mobx時修改state可以不用action,為什么教程里強調要使用?

使用mobx時修改state可以不用action,為什么教程里強調要使用?

我在使用mobx和react配合時,修改數據直接就是this.props.store.a = 'hello' 這樣也是可以工作的,但是教程說推薦使用action來修改,使用action有什么好處嗎?像我這樣修改一個值要寫一個action的話,那更改每一個都要寫一個action不是很麻煩?

回答
編輯回答
懶豬

1.聞所未聞。我不知道你有沒有用過react,你直接修改一個組件里的state,this.state.name = 'a',也是可以的,但是你這樣做過嗎?肯定是不行的,因為你這樣就算改了state,也不會觸發(fā)react的重新渲染,反而會導致數據和視圖不一致。所以react提供里setState這個api用來改變state,這樣可以重新觸發(fā)react的渲染周期
2.mobx和redux以及state一樣,都是儲存數據的對象而已。但是mobx和redux是全局的,說到底也只是個對象,你這么改它當然能改,但只是改了而已,并沒有觸發(fā)mobx和redux的一些動作。所以從這個意義上來說,action就像是setState,是改變這個狀態(tài)樹的方式,通過調用action觸發(fā)reducer,從而改變數據樹。這個可以保證mobx或redux正常工作,且數據和視圖保持一致。
3.不是修改一個值寫一個action,而是一個action對應一件事。不同的事對應不同的action,觸發(fā)對應的reducer,這樣可以讓mobx或redux知道,是什么動作導致了什么結果。

2017年8月14日 16:44