翻譯|使用教程|編輯:王香|2018-10-23 09:56:19.000|閱讀 418 次
概述:在React應用程序中學習一些有關使用State的快速和重要提示,以幫助您確定哪種選項,適合您的環境。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
下載Telerik UI for ASP.NET AJAX最新版本
在React應用程序中學習一些有關使用State的快速和重要提示,以幫助您確定哪種選項,適合您的環境。
首先,如果您是React的新用戶,或者開始使用新的React應用程序,請從React的內置狀態功能開始。除非你完全確定新的應用程序將成為一個復雜的龐然大物,否則就要抵制從州管理解決方案開始的沖動。我提出這個建議有兩個原因。首先,如果你是React的新手,你應該在引入外部依賴之前專注于學習React的細節。Redux和MobX很棒,但是在學習React的同時學習狀態解決方案不僅會使你的學習曲線變得陡峭,而且會使你對兩者的理解變得混亂。熟悉React,然后,當時機成熟時,再添加一塊拼圖。
您正在構建的應用程序可能會保持很長時間,并且您可能會發現setState()是處理組件內部和組件之間的UI更改的良好解決方案。那么什么時候考慮將Redux或MobX添加到您的應用中?
沒有硬性規定。復雜性傾向于蔓延到我們的應用程序中并突然停止。當您發現自己一次又一次地在組件之間傳遞狀態或者在級別之后冒出子組件狀態級別以便父級或更高級組件可以使用該狀態時,您將知道它是時候找到解決方案了。
Redux和MobX都圍繞實現一個或多個商店來管理狀態的原則進行組織。然后,組件將狀態更改分派給這些存儲,并在需要訪問狀態時訂閱狀態更改。這些模式為您的應用程序帶來了間接性和復雜性,但是當您的應用程序本身的狀態變得復雜時,最好選擇其中一種。
最后,如果您決定實施狀態管理解決方案,請在某些情況下隨時繼續使用setState()。 考慮一下:在子組件中按下一個按鈕來更新該組件的UI但是在層次結構的其他地方沒有影響真的需要進入狀態存儲嗎? 可能不是。
我第一次實現Redux時犯的錯誤之一是將所有內容放入Redux存儲庫,為每個UI更改創建操作和縮減器。這有其自身形式的爬行復雜性,如果不加以控制,可能會讓您想知道您是否曾經需要一個狀態管理解決方案。 很多時候,即使使用Redux或MobX等解決方案,也可以繼續使用本地組件狀態。我個人的經驗法則是使用完全獨立的本地狀態UI交互,或者使用可移植的組件,因此不依賴于全局存儲。
示例:在最近的項目中,我們創建了一個Map組件,該組件在應用程序的多個位置使用,以顯示事件詳細信息,當前位置等。組件依賴于狀態(通過Props)顯示它所顯示的數據,但我們使用本地狀態來管理內部狀態,例如選擇了哪個映射引腳,以及是否應顯示信息窗口。構造函數看起來像這樣:
class Map extends Component { constructor (props) { super(props) this.state = { showingInfoWindow: false, activeMarker: null, selectedPlace: {}, map: null } } onMarkerClick (props, marker, e) { this.setState({ selectedPlace: props, activeMarker: marker, showingInfoWindow: true }) } onInfoWindowClose () { this.setState({ showingInfoWindow: false, activeMarker: null }) } onMapClicked (props) { if (this.state.showingInfoWindow) { this.setState({ showingInfoWindow: false, activeMarker: null }) } } onMapReady (mapProps, map) { const { agency, languageCode } = this.props this.setState({ map: map }) if (agency) { const assignees = agency.details.assignees if (assignees.regions) { assignees.contract.map(region => { // Do things }) } } } }
底線:可以使用本地狀態,特別是如果它可以幫助您保持全球狀態清潔和有條理。 在開始一個新的React應用程序時,無論你是React新手還是經驗豐富的專業人士,都可以嘗試從跳轉中添加狀態管理解決方案。不過,在此之前,請記住YAGNI并考慮等到時機成熟。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn