Javascript 在装载的生命周期中保存Vuex状态

Javascript 在装载的生命周期中保存Vuex状态,javascript,object,vue.js,vuex,Javascript,Object,Vue.js,Vuex,我正在尝试将应用程序的根状态保存到VueJS的已装载生命周期中,并将副本冻结在$root的数据中,我的尝试如下: mounted() { this.globalState = this.$store.state; }, data () { return { globalState: null } } 然而,这种方法正在更新globalState,所以我想出了另一种方法,通过使用Object.freeze来冻结它,但运气不好,它一直在更新 我还

我正在尝试将应用程序的根状态保存到VueJS的已装载生命周期中,并将副本冻结在$root的数据中,我的尝试如下:

  mounted() {
    this.globalState = this.$store.state;
  },
  data () {
    return {
      globalState: null
    }
  }
然而,这种方法正在更新globalState,所以我想出了另一种方法,通过使用Object.freeze来冻结它,但运气不好,它一直在更新

我还尝试将this.$store.state复制到一个常量变量,并通过它更新globalState,但也失败了

我的最后一次尝试如下,我知道这是一个丑陋的代码,但请容忍它

    let emptyObj = {};
    Object.defineProperty(emptyObj, 'globalState',{
        value: this.$store.state,
        enumerable: false,
        configurable: false,
        writable: false
      }
    );
    this.globalState = emptyObj.globalState;

我的问题是,如何复制和冻结应用程序的初始状态并将其存储在单个数据中?

您可以通过使用具有空setter的计算值来实现这一点

e、 g


您可以通过使用具有空setter的计算值来实现这一点

e、 g


由于您不希望状态对象的副本发生反应,因此最好在components选项中创建自定义选项,而不是在data选项中冻结对象

您的自定义选项可以使用访问,并且不是被动的

this.$options.myGlobalState

由于您不希望状态对象的副本发生反应,因此最好在components选项中创建自定义选项,而不是在data选项中冻结对象

您的自定义选项可以使用访问,并且不是被动的

this.$options.myGlobalState

还是不行。如果存储区发生了突变,它仍会更新globalState。然后需要进行深层克隆。我使用洛达斯,但还有其他选择实际上,@Vamsi Krishna的答案更好。但是我还是会把我的放在这里=]当然,你的方法对于那些不在我的用例中的人来说是另一种方法。仍然不起作用。如果存储区发生了突变,它仍会更新globalState。然后需要进行深层克隆。我使用洛达斯,但还有其他选择实际上,@Vamsi Krishna的答案更好。但是我还是会把我的留在这里=]当然,对于不在我的用例中的人来说,你的方法是另一种选择。谢谢你的回答奏效了。编辑:它在数据对象中也不再是被动的,我已经测试过了。@KaungMyatLwin vuejs为“数据中的属性”选项设置getter/setter,使其成为被动的。如果你不想要反应性,你可以通过创建自定义选项来节省一些开销,我很清楚这一点。我不知道我必须递归地克隆状态以使其不可变。谢谢你的回答。编辑:它在数据对象中也不再是被动的,我已经测试过了。@KaungMyatLwin vuejs为“数据中的属性”选项设置getter/setter,使其成为被动的。如果你不想要反应性,你可以通过创建自定义选项来节省一些开销,我很清楚这一点。我不知道我必须递归地克隆状态以使其不可变。
this.$options.myGlobalState