我在localStorage中保存了一个用户状态,在身份验证后看起来像这样:
"user" : {
"first_name":"test19",
"last_name":"test19",
"email":"test19@testmail.com",
"token" : "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjcyMCwia"
...
现在我还有一个表单,一旦服务器返回更新的信息就触发一个动作来更新用户的状态,我的reducer看起来像这样:
case userConstants.UPDATE_USER:
return {
loggedIn: true,
...state,
user: action.user
};
到目前为止,除了来自服务器的返回对象不包含令牌外,上面的reducer的结果是一个没有我需要的令牌的新状态。
任何想法我做错了什么?谢谢! :)
答案 0 :(得分:2)
如果我正确理解您的问题,您希望避免在更新后丢失令牌。像这样更新你的减速机。
case userConstants.UPDATE_USER:
return {
loggedIn: true,
...state,
user: {
...action.user,
token: state.user.token
}
};
这里的想法是,在返回新状态之前,您将覆盖action.user的token属性和状态中的token属性(不变异)。
答案 1 :(得分:0)
首先添加状态,它将包含旧版本的用户,在主状态被破坏后覆盖用户:
case userConstants.UPDATE_USER:
return {
loggedIn: true,
...state,
user:{
...action.user,
...state.user,
},
};