2017-10-07 17 views
1

这是我的状态:使用对象分配到透明状态

export default new Vuex.Store({ 
    state: { 
    items: [ 
    ], 
    user: { 
     isAuthenticated: false, 
     info: { 
     createdAt: '', 
     email: '', 
     firstName: '', 
     id: '', 
     lastName: '', 
     }, 
     token: { 
     accessToken: '', 
     expiresIn: '', 
     refreshToken: '', 
     tokenType: '', 
     }, 
    }, 
    }, 
    actions, 
    mutations, 
    getters, 
    plugins: [createPersistedState({ 
    key: 'persistedState', 
    paths: ['user'], 
    })], 
    strict: process.env.NODE_ENV !== 'production', 
}); 

我一直单独的用户默认状态 - 所以我不必每个属性在必要时手动复位。

export const defaultUser = { 
    isAuthenticated: false, 
    info: { 
    createdAt: '', 
    email: '', 
    firstName: '', 
    id: '', 
    lastName: '', 
    }, 
    token: { 
    accessToken: '', 
    expiresIn: '', 
    refreshToken: '', 
    tokenType: '', 
    }, 
}; 

所以,当注销动作被触发:

export const logout = ({ commit, dispatch }) => { 
    commit(types.LOGOUT_USER); 
    dispatch('changeStatus', 'You need to login or register.'); 
}; 



[types.LOGOUT_USER](state) { 
    Object.assign(state.user, defaultUser); 
}, 

但神奇有时整个用户对象似乎没有被替换...(或defaultState物体充满了最后的值?)

+1

不会发布作为答案,因为我不在vue世界,但是这种'Object.assign'的使用会改变'state.user'。你可能想要'Object.assign({},state.user,defaultUser)'? –

+0

是的,该文件被称为“突变”:) https://vuex.vuejs.org/en/mutations.html它应该如何发生(我知道Redux做它不同,我也在开始时想) –

回答

0

除了其他答案: 本质上这个问题是间接重复的Changes to object made with Object.assign mutates source object

Object.assign可以安全使用最多2层嵌套。

例如Object.assign(myObj.firstProp, myDefaultObj.firstProp);

MDN documentation摘自:

警告的深克隆对于深克隆,我们需要使用其他替代 因为Object.assign()副本的属性值。如果 源值是对某个对象的引用,则它只会复制该参考值 。