2017-07-17 17 views
0

我目前有一個問題,我不確定如果我只是沒有看到更大的圖片(或者可能不這樣做),或者如果這是有效的減少... ...React-Redux - 向組件廣播一個動作

我有一個固定大小的SVG圖表。用戶可能會在我的頁面上打開一個面板,這會減小圖表的寬度。這導致我的圖表被壓縮。要解決這個問題,圖表應該更新維度,以便再次看起來很好。

所以...我有一個組件,用戶點擊以打開面板。該組件應該觸發一個動作,理想情況下是一般的,可重用的,如「rerenderSVG」。我可以使用標準的redux工作流程,並讓我的reducer在我的狀態中放置一些標誌,並讓我所有與svg相關的組件都能聽到。但這感覺像是過度殺傷。在我的狀態下,這是我所不希望的,我只想要一個廣播給所有安裝組件的動作,例如「嗨,組件,這只是發生了,如果這涉及到你:請做出反應」。

這可以很容易地完成在流量,但在減少...我不知道。這種模式是否能夠實施,並仍然符合減排方式?

如果這個問題是如此的平凡以至於已經有成千上萬的帖子對不起!但我真的不知道要查找哪些關鍵字...

回答

0

默認情況下,所有操作都會在flux/redux中廣播到所有reducer。您需要在每個要更新狀態的減速器中處理該特定操作。

如果您不想更新所有組件,只更新當前顯示的組件,則可以使用setState重新呈現該特定組件。

+0

請糾正我,如果我錯了,但不是減速機錯誤的地方,我的問題?就像我說的:我不想改變我的狀態。我想要一個行動被派遣/廣播到一個組件。所有reducer都可以做的是在我的應用程序狀態中添加一個標誌,以便我的組件可以監聽它。 ...我越想越多,我感覺這不可能以重做的方式完成,但我仍然想問問...... – hurrtz

+0

如果只有一個組件需要知道新的縮小尺寸,那麼縮減器可能不是一個好的地方。如果它是多個組件需要知道新的縮小尺寸,那麼可能是。我想在流量中直接在組件中訂閱並使用setState觸發重新渲染,而不是將其保存在商店中。是。在這種意義上你是對的,沒有辦法在沒有實際改變狀態的情況下通知組件。你可以寫一個redux中間件,但我不認爲這是一個很好的解決方案。 –

0

如果我明白了你的意思,所以我認爲你完全不需要使用redux。你在找什麼是父(通常是容器)組件的本地狀態。

爲什麼不在REDX存儲中保存圖表渲染其內容所需的原始數據(圖形/等的座標/數據集),但不要放置任何標誌或任何與數據相關的數據更改圖表框的高度/寬度。 由於redux商店本身存儲原始數據,因此數據的形狀應該是連接的容器組件的本地狀態。一旦數據被「整形」爲調整大小的視圖,您可以通過道具將其傳遞到您的「虛擬」展示組件,以便在其中描繪這些數據。我假設你很清楚the difference between smart/dumb or container/presentational components

一旦用戶以某種方式(有意或無意)更改圖表框的大小,則可以處理該事件resize和運行的功能(例如rerenderCharts),該重新計算數據的形狀和成分上調用setState。這將導致組件的所有鏈在容器大小發生變化時都會被重新渲染。

Here您可以看到一些示例,瞭解如何在組件級別處理調整大小事件。

希望這一切都有道理。