store.js 910 字节
Newer Older
F
Florian Didron 已提交
1
import { action, observable } from 'mobx'
2
import { useStaticRendering } from 'mobx-react'
F
Florian Didron 已提交
3

4 5
const isServer = typeof window === 'undefined'
useStaticRendering(isServer)
F
Florian Didron 已提交
6 7 8 9 10

class Store {
  @observable lastUpdate = 0
  @observable light = false

11 12 13
  constructor(isServer, initialData = {}) {
    this.lastUpdate =
      initialData.lastUpdate != null ? initialData.lastUpdate : Date.now()
14
    this.light = !!initialData.light
F
Florian Didron 已提交
15 16 17 18 19 20
  }

  @action start = () => {
    this.timer = setInterval(() => {
      this.lastUpdate = Date.now()
      this.light = true
21
    }, 1000)
F
Florian Didron 已提交
22 23 24 25 26
  }

  stop = () => clearInterval(this.timer)
}

27
let store = null
28
export function initializeStore(initialData) {
29
  // Always make a new store if server, otherwise state is shared between requests
30
  if (isServer) {
31 32 33 34
    return new Store(isServer, initialData)
  }
  if (store === null) {
    store = new Store(isServer, initialData)
F
Florian Didron 已提交
35
  }
36
  return store
F
Florian Didron 已提交
37
}