2016-09-28 161 views
2

實際上我不太清楚,如何命名這個問題!原生反應:始終運行組件

我有一個反應原生的JS文件,從服務器獲取數據並將其與本地數據庫進行比較。我需要這個同時運行,我怎麼能實現呢?當應用程序啓動時,應該運行,改變視圖(導航到其他組件)不應該銷燬它,它應該仍然在運行。

任何解決方案?

回答

9

你正在解釋一種叫做:Singleton的設計模式。

這裏是如何做到這一點:

let instance = null; 

class Singleton{ 
    constructor() { 
     if(!instance){ 
       instance = this; 
     } 

     // to test whether we have singleton or not 
     this.time = new Date() 

     return instance; 
     } 
} 

測試單 在上面的類,我們定義一個時間屬性,以確保我們有單正常工作。

let singleton = new Singleton() 
console.log(singleton.time); 

setTimeout(function(){ 
    let singleton = new Singleton(); 
    console.log(singleton.time); 
},4000); 

如果它爲兩個實例打印相同的時間,這意味着我們有一個工作單例。

現在,您可以在單例內異步加載服務器數據,並執行您想要的任何操作。每次嘗試訪問單例類時,它都將是同一個實例,並且不會多次實例化。換句話說,它不會被破壞。

來源:http://amanvirk.me/singleton-classes-in-es6/

+0

老實說,我沒有明白你的觀點。我找到了https://github.com/devfd/react-native-workers,不知道這是我在找什麼。順便說一句,謝謝你的回答。 – Ataomega

+0

據我所知,你想要一個類的單個實例,並且你希望這個實例在應用程序的整個生命週期中保持活動狀態。這件事被稱爲單身人士。無論您重新實例化該類,該類中的任何屬性都將保持持久性。在你的情況下,你會在單例類中異步加載你的服務器數據,並且它會一直存在。 –

+0

@Ataomega順便說一句,這些工作人員負責CPU密集型後臺任務。工作人員在與主應用程序不同的線程中運行,因此它不會鎖定應用程序。我不認爲這是正確的解決方案,但它可以工作。 –