2017-03-05 115 views
3

設置初始狀態,我已存儲的用戶名,全名&電子郵件地址終極版商店。我有一個需要電子郵件地址的組件,因此它可以進行API調用以獲取用戶組信息(使用域 - 即[email protected]成爲使用gmail.com進行數據庫查詢的關鍵)。該組件連接到商店並使用mapStateToProps獲取狀態信息。從終極版

它是一個反模式做這樣的事情在this.stat = {}

this.state = { 
    group: '', 
    owner: this.props.user.id, 
    domain: this.props.user.email.split('@')[1], 
    errors: {}, 
} 

感謝您的所有建議。

+0

不是一個好主意。直接在render方法中使用redux狀態。 –

回答

5

它不是很好的做法,在本地狀態複製終極版狀態。

爲什麼?因爲它不可擴展。想象一下,如果你的數據將需要改變。所以你需要更新你的本地狀態和redux狀態。而且,如果你的redux狀態會改變 - 你需要更新本地狀態。它會變成意大利麪。


你可以做什麼?

您可以將只使用從道具您的數據。實施shouldComponentUpdate方法以確保您的數據始終保持最新狀態。

shouldComponentUpdate(nextProps, nextState) { 
    return this.props.user !== nextProps.user 
} 

並使用道具中的數據。

+0

再次感謝@DmitriyKovalenko –

-1

我喜歡根據我的經驗法則來使用它們。

如果你需要的數據是特定於實例 - use state。 例如:您有一個按鈕組組件,由於存在多次使用該組件的可能性,因此請將數據保持在狀態。

如果您的數據需要是全球性的,所以任何人都可以從任何其他組件修改它,特別是如果你想要的數據到外部源被捆綁,用終極版狀態。由於數據是組件外部的,因此管理它變得非常簡單。

鏈接:https://github.com/reactjs/redux/issues/1287

+1

「總是建議使用Redux而不是React的內部狀態」。不,它不是。相反應該是真的。如果你正在存儲那個組件的內部狀態,那麼它們沒有理由使其成爲全局組件。就像你在JS中有全局和私有變量一樣,如果你可以讓它變爲私有的,你可以這樣做。 –

+0

這是我從很多討論中推斷出的,我讀過的。但那些仍然是意見,所以我的開場白是錯誤的。編輯答案。 –