Javascript 在装载的生命周期中保存Vuex状态
我正在尝试将应用程序的根状态保存到VueJS的已装载生命周期中,并将副本冻结在$root的数据中,我的尝试如下: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来冻结它,但运气不好,它一直在更新 我还
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