2017-06-24 59 views
0

這是mobx-utilsnow()實現的修改版本。根據我的理解,當觸發autorun函數時,會記錄「initial」,然後在1秒後,每秒鐘再次產生Date.now(),然後Date.now()的值。不理解來自資源的MobX-utils的行爲

function createIntervalTicker(interval) { 
    let subscriptionHandle 
    return fromResource(
     sink => { 
      subscriptionHandle = setInterval(
       () => sink(Date.now()), 
       interval 
      ); 
     }, 
     () => { 
      clearInterval(subscriptionHandle); 
     }, 
     'initial' 
    ); 
} 

autorun(() => { 
    console.log(createIntervalTicker(1000).current()) 
}) 

但是,我每次都會一次又一次地註銷「初始」註銷。從不記錄Date.now()的值。

看來,當調用sink(Date.now())時,它只會觸發自動運行功能,但不會更新由current()返回的值。

我將不勝感激任何意見。提前致謝。

[email protected] [email protected]

回答

0

你的代碼創建一個新的觀察到的,其值每次執行autorun時間傳遞給console.log。因此,您總是在瀏覽器控制檯中看到initial:mobx跟蹤對初始可觀察值的更改,但console.log在每個反應中都會收到新的可觀察值。

解決方案:存儲初始觀察的參考和重用

const ticker = createIntervalTicker(1000); 
autorun(() => { 
    console.log(ticker.current()) 
}) 
+0

D'哦,現在似乎很明顯。謝謝。 – nickbreaton

相關問題