vue.js - Vuex状态重置功能未定义
问题描述
Uncaught (in promise) ReferenceError: getDefaultState is not defined
尝试在模块存储上使用存储重置功能时获取。不幸的是,关于商店设置的 Nuxt 文档不是很详尽。谁能指出我在根级别上提供它所缺少的东西?
我的 store 重置是基于:
Vuex issue 118
上面这里用了一个状态函数
我的商店设置基于:
我实际使用的最新实现以及CMarzin
提供的这个非常结构化的答案
不相关:
这是关于一般商店使用情况
我的设置:
└── store
└── user
└── state.js
└── getters.js
└── mutations.js
└── actions.js
└── state.js (root state)
└── getters.js (root getters)
└── mutations.js (root mutations)
└── actions.js (root actions)
user/state.js
:
const getDefaultState = () => {
return {
counter: 2,
user: false,
}
}
const state = getDefaultState()
export default {
state,
}
user/mutations.js
:
export default {
ON_AUTH_STATE_CHANGED_MUTATION: (state, { authUser, claims }) => {
if (authUser) {
const { uid, email, emailVerified, displayName, photoURL } = authUser
state.user = { uid, email, emailVerified, displayName, photoURL }
} else {
state.user = false
}
},
RESET_USER_STATE(state) {
// Merge rather than replace so we don't lose observers
// https://github.com/vuejs/vuex/issues/1118
// https://stackoverflow.com/questions/42295340/how-to-clear-state-in-vuex-store
console.log(state)
Object.assign(state, getDefaultState())
},
}
user/actions.js
:
export default {
async onAuthStateChanged({ commit, dispatch }, { authUser }) {
if (!authUser) {
dispatch('resetUserState')
return
}
if (authUser && authUser.getIdToken) {
try {
const idToken = await authUser.getIdToken(true)
console.info('idToken', idToken)
} catch (e) {
console.error(e)
}
}
commit('ON_AUTH_STATE_CHANGED_MUTATION', { authUser })
},
resetUserState({ commit }) {
commit('RESET_USER_STATE')
},
}
解决方案
在您的user/mutations.js
文件中,您使用getDefaultState()
-function,但您需要导入它以便突变知道它是什么。为了导入它,您还必须导出它。
所以你user/state.js
应该改成这样:
export const getDefaultState = () => {
...
}
然后,如果您更改user/mutations.js
文件:
import { getDefaultState } from './state.js'
export default {
...
RESET_USER_STATE(state) {
// Merge rather than replace so we don't lose observers
// https://github.com/vuejs/vuex/issues/1118
// https://stackoverflow.com/questions/42295340/how-to-clear-state-in-vuex-store
console.log(state)
Object.assign(state, getDefaultState())
},
}
它现在应该可以工作了。
推荐阅读
- javascript - element.append 不适用于角度 js 中的自定义指令
- c# - WPF c# 动态对象。如何对添加的属性进行类型检查?
- indy - 更新了 Indy - 获取与 IPPeerClient 和 IPPeerServer 相关的错误
- python - openpyxl 读出 excel 表并将其传递给 pandas DataFrame
- javascript - 如何正确处理响应数据?
- javascript - 具有径向渐变和 globalAlpha=0.1 的 Firefox 画布无法在两台机器上运行
- python - 如何从 CORDIC、泰勒级数或 Python 中的替代计算正弦/余弦/正切?
- javascript - 你能解释一下错误处理如何与 Express 中间件一起工作吗?
- javascript - 使用 javascript/react 在网站上创建可格式化的文本框
- typescript - Typescript 文件结构以将所有类型保存在 *.d.ts