检查vuex-persist是否已还原Nuxt项目中的数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检查vuex-persist是否已还原Nuxt项目中的数据相关的知识,希望对你有一定的参考价值。

我已经在我的Nuxt项目中添加了Vuex-Persist和Vuex-ORM。当应用程序首次启动时,我想添加一些样板数据。

在我的default.vue布局中,我添加了一个创建的函数来添加此虚拟数据。

<script>
import Project from '../models/Project';

export default {
  created () {
    // I'm Using Vuex-Orm to check if there are any projects stored
    if (Project.query().count() === 0) {
      Project.insert({ data: [{ title: 'My first project' }] })
    }
  }
}
</script>

当应用程序被重新加载并第二次打开时,我希望Project.query().count()返回1。但由于vuex-persist尚未还原本地数据,因此它将始终返回0。

根据the docs ,这将是解决方案

import { store } from '@/store' // ...or wherever your `vuex` store is defined

const waitForStorageToBeReady = async (to, from, next) => {
  await store.restored
  next()
}

store.defined未定义,this.$store也是如此。该评论突出了我的确切问题“我的vuex商店在哪里定义?”

答案

我认为您必须把整个东西都放在一个路由守卫中。

创建这样的route-guard.js插件。但我尚未测试整个过程,希望它对您有所帮助。

export default function ({app}) {

    const waitForStorageToBeReady = async (to, from, next) => {
        await store.restored
        next()
    }

    app.router.beforeEach(waitForStorageToBeReady);
}

另一个选择是将吸气剂放入计算机并观察它:

export default {

    computed: {
        persistState() {
            return this.store.getter['get_persis_state'];
        }
    },

    watch: {
        persistState(newVal) {
            // check new val
        }
    }

}
另一答案

我从vuex-persist的the instructions那里获取了Nuxt,并制作了一个插件文件,如下所示:

// ~/plugins/vuex-persist.js
import VuexPersistence from 'vuex-persist'

export default ({ store }) => {
  window.onNuxtReady(() => {
    new VuexPersistence({
    /* your options */
    }).plugin(store);
  });
}

window.onNuxtReady导致插件在所有其他代码运行之后被加载。因此,我制作了router-guard.js插件还是在layout/default.vue文件中尝试过都没关系。

我最终得到了快速修复:

// ~/plugins/vuex-persist.js
import VuexPersistence from 'vuex-persist'

export default ({ store }) => {
 window.onNuxtReady(() => {
    new VuexPersistence().plugin(store);

    if (Project.query().count() === 0) {
      Project.insert({ data: [{ title: 'My first project' }] })
    }
  });
}

以上是关于检查vuex-persist是否已还原Nuxt项目中的数据的主要内容,如果未能解决你的问题,请参考以下文章

Nuxt.js:未定义窗口

如何检查 s-s-r Nuxt 应用程序中的服务器构建是不是已更新

创建nuxt框架的项目

如何使用 Nuxt.js 在 vuex 状态中获取本地存储数据

尝试使用 nuxt js 检查属性是不是存在

为啥 Vuex-persist 不在 localStorage 中存储任何内容?