Vue.js vuex persistedstate未保存类方法

Vue.js vuex persistedstate未保存类方法,vue.js,vuex,Vue.js,Vuex,我更倾向于说我的背景是C语言,所以我喜欢在我的类中声明方法。我创建了一个包含属性和方法的用户类,并将其添加到vuex persistedstate中。其中一个方法是logout()方法,用于清除属性。当我尝试调用此方法时,出现以下错误: TypeError: this.$data.user.logout is not a function 然后我查看了本地存储,并注意到用户没有对类方法的引用。因此,我继续将该方法中的逻辑复制到我的vue组件中,它起了作用,因此我假设问题是vuex persis

我更倾向于说我的背景是C语言,所以我喜欢在我的类中声明方法。我创建了一个包含属性和方法的用户类,并将其添加到vuex persistedstate中。其中一个方法是logout()方法,用于清除属性。当我尝试调用此方法时,出现以下错误:

TypeError: this.$data.user.logout is not a function
然后我查看了本地存储,并注意到用户没有对类方法的引用。因此,我继续将该方法中的逻辑复制到我的vue组件中,它起了作用,因此我假设问题是vuex persistedstate没有保存对方法的引用,这就是方法调用不起作用的原因


我想在一个位置声明注销方法,而不是将其分散到vue组件中,实现这一点的最佳实践是什么?是否可以在类声明中执行此操作,或者是否需要用户帮助文件?

我找到了一个解决方案。。。我正在努力改进它。基本上,我使用从localstorage拉入vuex的值在vue组件中创建一个新的用户对象,该对象引用位于我的用户类声明中的方法。我记得有人建议我们应该创建从vuex中提取的对象的克隆,以便在vue组件中使用。我仍在完善代码,但这是基本的想法。

当然可以!我的代码也在GitHub上,所以您也可以在那里查看它,但在我看来,vuex基本上不存储方法。您应该查看的第一个文件是my user.js文件:

在这个文件中,我有一个名为shallow clone的方法,它获取从API接收到的信息并将其分配给用户:

shallowClone(data) {

    if (data !== undefined) {

        this.id = data.id;
        this.userName = data.userName;
        this.firstName = data.firstName;
        this.lastName = data.lastName;
        this.nickName = data.nickName;
        this.fullName = data.fullName;
        this.email = data.email;
        this.isActive = data.isActive;
        this.isAdmin = data.isAdmin
        this.isSuperUser = data.isSuperUser;
        this.dateCreated = data.dateCreated;
        this.dateUpdated = data.dateUpdated;
        this.isLoggedIn = data.isLoggedIn;
    }
}
您当然不需要将其抽象出来,但我发现它使代码更易于维护

然后在mounted()生命周期钩子中,我通过shallowClone方法将从API接收的用户分配给组件用户。请记住,我在这个项目上做了额外的工作,登录表单现在是它自己的组件,它从应用程序接收用户作为道具:

可在此处查看完整代码:


我遇到了同样的问题。你的解决方案有效吗?想与大家分享吗?嗨,Berco Beute,我添加了一个新的答案,详细说明了我的解决方案。如果你有任何问题,请告诉我。
mounted() {
let self = this;
window.addEventListener("keyup", function (event) {
  if (event.keyCode === 13) {
    self.authenticate();
  }
});
this.$data.user = new User();
this.$data.user.shallowClone(this.$props.userForAuthentication);
},