这是来自mobx-utils的now()实现的修改版本。根据我的理解,当autorun函数被触发时,"initial“将被记录下来,然后在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
发布于 2017-06-27 11:59:56
您的代码创建一个新的可观察对象,并在每次执行autorun时将其值传递给console.log。因此,您总是在浏览器控制台中看到initial:console.log跟踪对初始可观察对象的更改,但mobx在每个反应中接收新的可观察对象。
解决方案:存储对初始可观察对象的引用并重用它
const ticker = createIntervalTicker(1000);
autorun(() => {
console.log(ticker.current())
})https://stackoverflow.com/questions/44731896
复制相似问题