我的页面
目标
- 我的页面能够实现判断用户登录状态来显示不同的效果
- 能够实现退出登录功能
结构和样式
- 对应的结构样式可以直接拿过来用,我们最主要要实现里面的代码逻辑,文件在 pages/Profile/index
render() {
return (
<div className={styles.root}>
{/* 个人信息 */}
<div className={styles.title}>
<img
className={styles.bg}
src={BASE_URL + '/img/profile/bg.png'}
alt="背景图"
/>
<div className={styles.info}>
<div className={styles.myIcon}>
<img
className={styles.avatar}
src={avatar || DEFAULT_AVATAR}
alt="icon"
/>
</div>
<div className={styles.user}>
<div className={styles.name}>{nickname || '游客'}</div>
{/* 登录后展示: */}
{isLogin ? (
<>
<div className={styles.auth}>
<span onClick={this.logout}>退出</span>
</div>
<div className={styles.edit}>
编辑个人资料
<span className={styles.arrow}>
<i className="iconfont icon-arrow" />
</span>
</div>
</>
) : (
<div className={styles.edit}>
<Button
type="primary"
size="small"
inline
onClick={() => history.push('/login')}
>
去登录
</Button>
</div>
)}
{/* 未登录展示: */}
</div>
</div>
</div>
{/* 九宫格菜单 */}
<Grid
data={menus}
// 列数
columnNum={3}
// 不需要分割线
hasLine={false}
// 渲染每一项
renderItem={item =>
item.to ? (
<Link to={item.to}>
<div className={styles.menuItem}>
<i className={`iconfont ${item.iconfont}`} />
<span>{item.name}</span>
</div>
</Link>
) : (
<div className={styles.menuItem}>
<i className={`iconfont ${item.iconfont}`} />
<span>{item.name}</span>
</div>
)
}
/>
{/* 加入我们 */}
<div className={styles.ad}>
<img src={BASE_URL + '/img/profile/join.png'} alt="" />
</div>
</div>
)
}
功能分析
- 判断是否登录(本地缓存中是否有token信息,直接调用isAuth() 方法即可,这里在utils/auth.js文件中已经封装好了)
- 如果登录了,就发送请求获取个人资料,并且在页面中展示个人资料
- 如果没有登录,则不获取个人资料,只在页面中展示未登录信息
- 在页面中展示登录或未登录信息,就要通过state变化来体现,因此,需要一个标示是否登录的状态
判断用户是否登陆步骤(★★★)
- 在state中添加两个状态:isLogin(是否登录)和userInfo(用户信息)