在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Python  HTML/ 使用mobx時(shí)修改state可以不用action,為什么教程里強(qiáng)調(diào)要使用?

使用mobx時(shí)修改state可以不用action,為什么教程里強(qiáng)調(diào)要使用?

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

回答
編輯回答
懶豬

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

2017年8月14日 16:44