鍍金池/ 問(wèn)答/HTML/ redux、vuex狀態(tài)管理,state是否應(yīng)該盡量放在store中?

redux、vuex狀態(tài)管理,state是否應(yīng)該盡量放在store中?

redux

之前寫(xiě)react比較多,習(xí)慣將state都放在store中。不管container組件還是UI組件,基本上都沒(méi)有自己的state。UI組件純渲染,container組件通過(guò)mapStateToProps和mapDispatchToProps控制輸入。似乎也是redux的三大原則之一:

整個(gè)應(yīng)用的 state 被儲(chǔ)存在一棵 object tree 中,并且這個(gè) object tree 只存在于唯一一個(gè) store 中。

個(gè)人感覺(jué):

  1. store有點(diǎn)太龐大了(其實(shí)這也沒(méi)啥問(wèn)題)
  2. 有點(diǎn)麻煩,container組件的state太多(或者說(shuō)80%+都是私有狀態(tài)),每次都要到reducers中寫(xiě)一把,然后再到container組件中通過(guò)mapStateToProps導(dǎo)入props
const reducers = combineReducers({
    a,
    b,
    c,
})

const mapStateToProps = state => ({
    myC: state.c,
});

vuex

最近在看vuex,似乎vuex中只規(guī)定應(yīng)用層級(jí)的狀態(tài)需要放在store中,并說(shuō)明組件可以擁有自己的state。
但是這樣的話,組件數(shù)據(jù)流似乎又比較難控制,比如this.$emit直接調(diào)用父組件的回調(diào)。

clipboard.png

不知道我有沒(méi)有理解錯(cuò)的地方?大家是如何看待store.state和組件私有狀態(tài)的?

回答
編輯回答
風(fēng)畔

嗯,共享狀態(tài)就放在 vuex 中,不是共享的就不要全局,放在自己?jiǎn)为?dú)的組件中就好了!

2017年10月29日 03:26
編輯回答
愛(ài)是癌

封裝組件時(shí)它的大部分狀態(tài)肯定是自己管理的

2017年5月8日 20:17
編輯回答
呆萌傻

就我的使用經(jīng)歷而言,將state分成兩種,需要共享的和組件私有的。前者放到store中,后者不用。

后者需要特別說(shuō)明一下,是僅對(duì)組件本身起作用,不影響其他組件的state。

當(dāng)然,我覺(jué)得這僅僅是個(gè)度的問(wèn)題,將全部state放到store中統(tǒng)一管理自然是很好,但是對(duì)于開(kāi)發(fā)就不太友好了。而且將一些私有的state也放到store中,帶來(lái)的收益幾乎沒(méi)有,卻對(duì)開(kāi)發(fā)效率有很大影響。

2017年6月10日 07:04
編輯回答
兔囡囡

我個(gè)人使用vue、react,都是將共享狀態(tài)存入store,組件內(nèi)部狀態(tài)放到組件內(nèi)部state中,這樣開(kāi)發(fā)效率更高,結(jié)構(gòu)也更清晰。

2018年2月18日 14:58
編輯回答
忠妾

這個(gè)問(wèn)題, redux 的文檔里也有提到.

必須將所有 state 都維護(hù)在 Redux 中嗎? 可以用 React 的 setState() 方法嗎?

沒(méi)有 “標(biāo)準(zhǔn)”。有些用戶選擇將所有數(shù)據(jù)都在 Redux 中維護(hù),那么在任何時(shí)刻,應(yīng)用都是完全有序及可控的。也有人將類似于“下拉菜單是否打開(kāi)”的非關(guān)鍵或者 UI 狀態(tài),在組件內(nèi)部維護(hù)。適合自己的才是最好的。

使用局部組件狀態(tài)是更好的。作為一名開(kāi)發(fā)者,應(yīng)該決定使用何種 state 來(lái)組裝你的應(yīng)用,每個(gè) state 的生存范圍 是什么。在兩者之間做好平衡,然后就去做吧。

這里有一些將怎樣的數(shù)據(jù)放入 Redux 的經(jīng)驗(yàn)法則:

應(yīng)用的其他部分是否關(guān)心這個(gè)數(shù)據(jù)?
是否需要根據(jù)需要在原始數(shù)據(jù)的基礎(chǔ)上創(chuàng)建衍生數(shù)據(jù)?
相同的數(shù)據(jù)是否被用作驅(qū)動(dòng)多個(gè)組件?
能否將狀態(tài)恢復(fù)到特定時(shí)間點(diǎn)(在時(shí)光旅行調(diào)試的時(shí)候)?
是否要緩存數(shù)據(jù)(比如:數(shù)據(jù)存在的情況下直接去使用它而不是重復(fù)去請(qǐng)求他)?

http://cn.redux.js.org/docs/f...

我 redux 是只存需要全局共享, 需要持久化的狀態(tài).
其他的都讓組件自己內(nèi)部維護(hù).

2017年5月23日 01:55