我是React的新手,試圖通過它來構建一個良好的應用程序體系結構。 我也用打字稿與所有的特點:接口,異步的await,仿製等,所以,我很疑惑實施某種模式:基於React/Redux構建基於React和依賴注入的成熟應用程序體系結構
1)依賴注入,可重用的組件實例
的我無法通過的第一件事是DI。假設我們有一個組件類UserProfile
,它需要一些依賴項,如UserProvider
。如果組件實例(注入Deps)可以重用,那將是完美的,但恐怕只有我的夢想,而不是反應的人。 :) 所以,我應該這樣,把這個組件:
<UserProfile id={123} />
好吧,什麼是這裏注入依賴的正確方法?作爲一個像這樣的屬性<UserProfile id={123} dependency={userProvider: userProviderInstance} />
? 難道你不認爲將組件輸入數據,選項/參數和依賴關係放在一起很奇怪嗎?如果我能夠清楚地分開它們並對組件類進行通用限制,我會很高興。最佳做法是什麼?
無法重用組件實例的另一方面是,我們必須在所有組件結構中攜帶一些不必要的對象,以便將它們注入深處的底部。沒有人告訴你什麼組件確實使用它們。並試圖想象在大型項目中添加對低級組件的依賴關係。我不能。
2)使用承諾
讓我們考慮是應該呈現一個櫃檯一個簡單的組件:<Counter value={123} />
。 現在,值從一些API調用的方法getCounter(id: number): Promise<number>;
了,所以明顯的方式把所有在一起,看起來是這樣的:
<Counter value={await provider.getCounter(id)} />
但I'T不可能的,我知道。通常的做法告訴我們通過setState
方法並在收到值後重新渲染組件。
現在設想父組件非常複雜並且有許多不同的提供者。所以,父組件可能沒有明確的狀態類型。這也可能是有條件的,你知道...
你可以建議我實現異步獲取計數器組件,但我會拒絕的一個簡單的理由:該組件不知道任何關於該值的起源。在其他情況下,該值直接作爲數字傳遞。那麼,您是否有更好的想法,在使用承諾時如何保持代碼清潔和簡單?
請讓我知道,如果你遇到一些好文章或有你自己的經驗解決這些問題。 PS:感謝您的關注! :)
通過在'render()'函數中不放置具有副作用的邏輯(例如API調用),可以完全避免#2。與API的異步交互通常在動作創建者,中間件,傳奇等中執行,結果通過道具傳播到組件。 –