Nuxt vuex auth store 没有更新我的 getters
Nuxt vuex auth store is not updating my getters
即使商店包含数据,我的 getter 也没有更新反应。
这是我的代码
function initialAuthState (): AuthState {
return {
token: undefined,
currentUser: undefined,
refreshToken: undefined
}
}
export const store: AuthState = initialAuthState()
export const actions: ActionTree<AuthState, RootState> = {
[AuthStoreActions.LOGIN]: async ({ commit }, payload: { employeeID: string, password?: string }): Promise<User> => {
const response = await AuthRepository.login(payload)
// Save Token and User
commit(AuthStoreMutations.SET_TOKENS, { token: response.data.token, refreshToken: response.data.refreshToken })
const user = User.parseFromObject(response.data.user)
commit(AuthStoreMutations.SET_USER, user)
return new User()
},
[AuthStoreActions.LOGOUT]: ({ commit }): void => {
commit(AuthStoreMutations.CLEAR_STORE)
}
}
export const mutations: MutationTree<AuthState> = {
[AuthStoreMutations.SET_TOKENS]: (state: AuthState, value: { token: string, refreshToken: string }) => {
state.token = value.token
state.refreshToken = value.refreshToken
},
[AuthStoreMutations.SET_USER]: (state: AuthState, value: User) => {
const t = {}
Object.assign(t, value)
state.currentUser = t as User
},
[AuthStoreMutations.CLEAR_STORE]: (state: AuthState) => {
//state.token = null
//state.refreshToken = null
//state.currentUser = null
}
}
export const getters: GetterTree<AuthState, RootState> = {
[AuthStoreGetters.TOKEN]: (state: AuthState) => state.token,
[AuthStoreGetters.REFRESH_TOKEN]: (state: AuthState) => state.refreshToken,
[AuthStoreGetters.CURRENT_USER]: (state: AuthState) => {
console.log(state.currentUser)
if (state.currentUser) {
// needs to be parsed because VuexPersistence does not keep type information
return User.parseFromObject(state.currentUser)
}
return undefined
}
}
这就是我如何称呼我的 getter
@AuthStore.Getter(AuthStoreGetters.TOKEN)
private token?: string
created () {
console.log(this.token)
}
如您在此屏幕截图中所见,数据存在。更新我的 getter 的唯一方法是重新加载网站。
我们发现了错误。
export const store: AuthState = initialAuthState()
必须是
export const state: AuthState = initialAuthState()
我希望这可以帮助其他人
即使商店包含数据,我的 getter 也没有更新反应。
这是我的代码
function initialAuthState (): AuthState {
return {
token: undefined,
currentUser: undefined,
refreshToken: undefined
}
}
export const store: AuthState = initialAuthState()
export const actions: ActionTree<AuthState, RootState> = {
[AuthStoreActions.LOGIN]: async ({ commit }, payload: { employeeID: string, password?: string }): Promise<User> => {
const response = await AuthRepository.login(payload)
// Save Token and User
commit(AuthStoreMutations.SET_TOKENS, { token: response.data.token, refreshToken: response.data.refreshToken })
const user = User.parseFromObject(response.data.user)
commit(AuthStoreMutations.SET_USER, user)
return new User()
},
[AuthStoreActions.LOGOUT]: ({ commit }): void => {
commit(AuthStoreMutations.CLEAR_STORE)
}
}
export const mutations: MutationTree<AuthState> = {
[AuthStoreMutations.SET_TOKENS]: (state: AuthState, value: { token: string, refreshToken: string }) => {
state.token = value.token
state.refreshToken = value.refreshToken
},
[AuthStoreMutations.SET_USER]: (state: AuthState, value: User) => {
const t = {}
Object.assign(t, value)
state.currentUser = t as User
},
[AuthStoreMutations.CLEAR_STORE]: (state: AuthState) => {
//state.token = null
//state.refreshToken = null
//state.currentUser = null
}
}
export const getters: GetterTree<AuthState, RootState> = {
[AuthStoreGetters.TOKEN]: (state: AuthState) => state.token,
[AuthStoreGetters.REFRESH_TOKEN]: (state: AuthState) => state.refreshToken,
[AuthStoreGetters.CURRENT_USER]: (state: AuthState) => {
console.log(state.currentUser)
if (state.currentUser) {
// needs to be parsed because VuexPersistence does not keep type information
return User.parseFromObject(state.currentUser)
}
return undefined
}
}
这就是我如何称呼我的 getter
@AuthStore.Getter(AuthStoreGetters.TOKEN)
private token?: string
created () {
console.log(this.token)
}
如您在此屏幕截图中所见,数据存在。更新我的 getter 的唯一方法是重新加载网站。
我们发现了错误。
export const store: AuthState = initialAuthState()
必须是
export const state: AuthState = initialAuthState()
我希望这可以帮助其他人