不了解来自Resource的MobX-utils的行为

时间:2017-06-24 01:30:24

标签: mobx mobx-utils

这是now() mobx-utils实施的修改版本。根据我的理解,当autorun功能被触发时,"初始"将被记录,然后在1秒后,Date.now()的值,然后每秒一次又一次Date.now()

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()返回的值。

我很感激任何建议。提前谢谢。

mobx@3.1.16 mobx-utils@2.0.2

1 个答案:

答案 0 :(得分:0)

您的代码会创建一个新的observable,并在每次console.log执行时将其值传递给autorun。因此,您总是在浏览器控制台中看到initial:mobx跟踪对初始可观察对象的更改,但console.log会在每个反应中收到新的可观察对象。

解决方案:存储对初始observable的引用并重用它

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