2017-09-24 56 views
0

我有異步操作,從API中提取數據並將其與存儲中的集合合併,觸發適當的計算以重新評估和填充視圖。在React組件生命週期方法上調用MobX行爲是不好的做法

我以前的解決方案是@異步計算,它將在其主體中包含觸發變量(不用於除觸發重新計算之外的其他任何操作)並填充視圖。

很高興與@計算異步 - > @async行動重構,但我遇到的最後一個障礙讓我流連忘返。

雖然@computeds在第一次獲得計算時首次計算,但@action需要明確調用。

我不能在商店的構造函數中調用它,因爲它不會被測試,所以我唯一能夠使用componentDidMount或WillMount的React組件。 AFAIK出於性能原因,最好在componentDidMount中執行此操作。 但是(!)是否可以在React生命週期方法中顯式調用操作?或者我應該認爲這是不好的做法?

到現在爲止,我寧願避免它,但是這一個案例似乎用@異步動作處理得更好,只要不打破任何可能會導致設計模式變大的問題,我都會堅持使用它將來會回到我的臉上。

謝謝!

+0

up?起來了嗎? – azrahel

回答

0

你的意思是不可測試的?如果組件需要從io/store中顯示數據,您能否使用存根提供沒有數據?

看到這篇文章的更多:https://hackernoon.com/how-to-decouple-state-and-ui-a-k-a-you-dont-need-componentwillmount-cc90b787aa37

+0

我的@action是通過參數(從服務器獲取的項目數量)獲取的。我不能在構造函數中用固定的參數值明確地調用它,因爲在測試中,每當創建商店時它總是會調用特定的值。這是不可測試的。 - 如果我想從API獲取不同的數量,或者測試傳遞0什麼都沒有獲取?如果代碼在構造函數中,我不能以乾淨的方式來完成。建設者不應該有副作用 - 例如。 API調用。 – azrahel

+0

我認爲在測試中,你必須分開讀取本身(這是商店的一部分,對嗎?)以及如何在組件中使用獲取的數據。在我發佈的鏈接中,抓取由路由器調用。 – Lucas

相關問題