我想要一个明确的方法来创建商店,当我知道新的服务数据可用时我可以刷新(例如来自lazyObservable
的{{1}}),但是可以轻松附加更多计算值和动作函数。
从create-react-app开始,使用此mobx-utils
。
index.js
每次在控制台中运行import React from 'react';
import ReactDOM from 'react-dom';
import {observable} from 'mobx';
import {observer} from 'mobx-react';
import {asyncAction} from 'mobx-utils';
const flipACoin = () => Math.random() > 0.5;
function determineGodliness() {
const screwYourRAM = new Array(1000000).fill(Math.random());
return new Promise((resolve) => {
setTimeout(() => {
resolve([flipACoin(), flipACoin()]);
}, 1500);
});
}
function godStore() {
const store = observable({
alpha: false,
omega: false,
waiting: false,
refresh: asyncAction(function *() {
this.waiting = true;
[this.alpha, this.omega] = yield determineGodliness();
this.waiting = false;
}),
get isGod() {
return this.alpha && this.omega;
}
});
store.refresh();
return store;
}
window.store = godStore();
const App = observer(({store}) => <p>{
(store.waiting)
? 'The suspense is killing me!'
: (store.isGod)
? 'I am the Alpha and the Omega'
: 'I just work here.'
}</p>);
ReactDOM.render(<App store={window.store} />, document.getElementById('root'));
时,任务管理器都会显示内存使用量增加。有趣的是,使用window.store.refresh()
实际上会导致内存使用的振荡,而不是线性爬升。在这两个相互矛盾的情况之间,我对垃圾收集器如何查看此设置感到困惑。
我能做些什么来绝对确定setInterval(window.store.refresh, 3000)
最终会被垃圾收集?我所关心的只是从生成器返回的内容,而不是在过渡期间分配的内容。