在setting reducer里获取本地用户信息 获取本地token,然后在settingFrom里面利用mapState
然后通过const 从props中取值 在回显到表单页面上面。
第二个:想要更改信息:
账号不能更改,其他可以更改(在setting中直接可以不显示邮箱框)
提交步骤
这样当我提交的时候触发onsubitm方法发送action在到reducer
在reducer里面其实就是更新方法
登录之后返回token,更新的时候不要提交token
更新的时候走后端路由 有中间件进行验证,这时我发现我的token根本就没传
在发送action请求的时候发现调用的是 request中的update方法update调用apiClient.put方法 put就在apiClient的面封装的请求方法,发现put方法里面的getHeaders里面默认传的token为空
所以现在进行从本地取出token、(利用getData(token)方法成功取出token)然后封装到getHeaders里面
这时在去请求 如果status===1 这时我就利用saveData进行把result里面的data与 data的token进行同步一下,就可以成功发送请求 最后用return 把最新的用户信息返回到内存
退出登录流程
第一步:设置退出的常量 然后派发action 再到reducer里面去清除
state={}//1:内存清除
2:本地清除
deleteData('currentUser') 清除用户信息
deleteData('token')清除token
3:重新覆盖 然后进行跳转地址
return{...state,redirect:'/login'}
4:跳转在页面中进行判断 如果redirect有值并且和原先的不一样 那就进行跳转(利用生命周期)
componentDidUpdate(preProps){
if (this.props.redirect&&this.props.redirect !== preProps.redirect) {
store.dispatch(replace(this.props.redirect))
}
}
5:此时发现一个bug 就是当我退出登录成功了但是 我右上角的角标没有退出来显示未登录的状态。
解决思路:因为Menu里面的currentUser用户信息是用的login里面的用户信息 所以login里面的用户信息也需要清空一下
在login的reducer里面如果符合constant.SETTING_LOGOUT字段就进行清空以及覆盖
case constant.SETTING_LOGOUT:
console.log('login current');
state.currentUser=null
//deleteData('currentUser')
//deleteData('token')
return{...state}
6:bug问题数据回显为空 点击设置不显示当前信息
当我点击设置的时候我想要的数据没有返回回来,我进行数据回显的时候进入default进行原本的数据展示回显,但是因为返回的是同一个地址值所以mapState不生效,数据不回显
首先想明白 mapState生效必须是返回一个新的地址值,所以不可以这么像图一一样写,要像图二这样写,开辟一个新地址
default:
图一
//return initState
图二!!!
return {
...initUser(),
errors:null,
currentUser:initUser(),
token:initToken(),
}