import React from "react";
import { useAppSelector } from "../../hooks/store";
import "./style.css"

const SelfStatus :React.FC = () => {

    const userName = useAppSelector(state => state.user.userName)
    const role = useAppSelector(state => state.user.role)
    const uploadTraffic = useAppSelector(state => state.user.uploadTraffic)
    const downloadTraffic = useAppSelector(state => state.user.downloadTraffic)
    const downloadPoints = useAppSelector(state => state.user.downloadPoints)
    const avatar = useAppSelector(state => state.user.avatar)
    const islogin = useAppSelector(state => state.user.isLogin)
    return <>
            <div className="user">
                <img className="avatar" src={avatar}></img>
                <p className="userName">{userName},欢迎你</p>
            </div>
            <div className="info" >
                <p className="uploadTraffic">上传量：{uploadTraffic}</p>
                <p>下载量：{downloadTraffic}</p>
                <p>下载积分：{downloadPoints}</p>
            </div>

    </>
}

export default SelfStatus
