Skip to content

resetStoreVM

javascript
function resetStoreVM (store, state, hot) {
  // 存放所有 getters
  store.getters = {}
  const wrappedGetters = store._wrappedGetters
  const computed = {}
  forEachValue(wrappedGetters, (fn, key) => {
    computed[key] = partial(fn, store)
    Object.defineProperty(store.getters, key, {
      get: () => store._vm[key],
      enumerable: true // for local getters
    })
  })

  store._vm = new Vue({
    data: {
      // 实现 state 响应式,$ 开头的属性不会代理到实例上
      // 但是会挂载到 _data 上, 减少了一次代理
      $$state: state
    },
    // 实现 getter
    computed
  })
}