Nuxt.js vuex 存储未持久化
Nuxt.js vuex store not persisted
我的 Nuxt.js 安装有一些奇怪的问题。
Store中的某些状态不是持久的,每次我加载另一个视图时,它们都会恢复到默认值。
pages/test.vue
<template>
<section class="section">
<b-container>
<b-row>
<b-col cols=12>
<b-button @click="setTest" variant="dark">test</b-button> | {{this.$store.state.test}} |
</b-col>
</b-row>
</b-container>
</section>
</template>
<script>
export default {
name: 'test',
methods: {
setTest() {
this.$store.commit("setTest")
},
}
}
</script>
store/index.js
export const state = () => ({
test: "test"
})
export const mutations = {
setTest: (state) => state.test = 'Hello'
}
Testscenario 是点击“测试”按钮,调用带有突变提交“setTest”的方法,将状态设置为“Hello”。目前它工作正常,但如果我更改视图或重新加载页面,状态将设置为默认“测试”。
我做错了什么?
好吧,所以这个行为完全符合逻辑。 Vuex 不应该是持久的。
对于前端的任何持久性,您需要:
- cookies
- 本地存储
- 在URL(查询参数)中传递它
- IndexedDB
- 通过调用后端获取数据
这里的一些包可能有用:https://github.com/vuejs/awesome-vue#persistence
如果您使用 F5 重新加载您的页面,您的所有 JS 将被擦除并再次加载。因此,不会保留 state 因为它将是一个全新的页面。使用前端框架时,您不能期望它在页面刷新后就可以工作。
当您遵循 href
时,也是如此,这是一个实际的 真实 导航。你需要做的是使用一个 <nuxt-link></nuxt-link>
组件,像 to="/profile"
这样的东西让 VueJS 移动到这个 URL.
NuxtLink is a Nuxt.js component and essentially a component on top of <router-link></router-link>
, which is Vue router.
TLDR:您不能使用 window.location.href
或 <a href="..."
之类的东西。如果您仅使用 VueJS,则可以通过 Nuxt(nuxt-link
)或 Vue 的路由器(router-link
)使用给定的组件。
阅读 Vue 路由器的文档可能是更好地了解事物的良好开端!
我的 Nuxt.js 安装有一些奇怪的问题。 Store中的某些状态不是持久的,每次我加载另一个视图时,它们都会恢复到默认值。
pages/test.vue
<template>
<section class="section">
<b-container>
<b-row>
<b-col cols=12>
<b-button @click="setTest" variant="dark">test</b-button> | {{this.$store.state.test}} |
</b-col>
</b-row>
</b-container>
</section>
</template>
<script>
export default {
name: 'test',
methods: {
setTest() {
this.$store.commit("setTest")
},
}
}
</script>
store/index.js
export const state = () => ({
test: "test"
})
export const mutations = {
setTest: (state) => state.test = 'Hello'
}
Testscenario 是点击“测试”按钮,调用带有突变提交“setTest”的方法,将状态设置为“Hello”。目前它工作正常,但如果我更改视图或重新加载页面,状态将设置为默认“测试”。
我做错了什么?
好吧,所以这个行为完全符合逻辑。 Vuex 不应该是持久的。
对于前端的任何持久性,您需要:
- cookies
- 本地存储
- 在URL(查询参数)中传递它
- IndexedDB
- 通过调用后端获取数据
这里的一些包可能有用:https://github.com/vuejs/awesome-vue#persistence
如果您使用 F5 重新加载您的页面,您的所有 JS 将被擦除并再次加载。因此,不会保留 state 因为它将是一个全新的页面。使用前端框架时,您不能期望它在页面刷新后就可以工作。
当您遵循 href
时,也是如此,这是一个实际的 真实 导航。你需要做的是使用一个 <nuxt-link></nuxt-link>
组件,像 to="/profile"
这样的东西让 VueJS 移动到这个 URL.
NuxtLink is a Nuxt.js component and essentially a component on top of <router-link></router-link>
, which is Vue router.
TLDR:您不能使用 window.location.href
或 <a href="..."
之类的东西。如果您仅使用 VueJS,则可以通过 Nuxt(nuxt-link
)或 Vue 的路由器(router-link
)使用给定的组件。
阅读 Vue 路由器的文档可能是更好地了解事物的良好开端!