【山东大学软件学院21级项目实训】前端2:创建一个现代化用户资料页面:使用 React、Material-UI 和 React Query

前提回顾:

在本文中,我们将深入探讨如何使用 React、Material-UI 和 React Query 创建一个现代化的用户资料页面。这个页面将展示用户的头像、基本信息、状态面板以及活动热图。让我们逐步解析这个过程,并探讨每个部分的实现细节。

技术栈简介

  • React: 一个用于构建用户界面的 JavaScript 库。

  • Material-UI: 一个受 Google Material Design 规范启发的 React 组件库。

  • React Query: 一个用于数据获取和状态管理的库,简化了与服务器通信的流程。

项目结构

为了方便管理,我们将代码分成多个组件。主要组件包括 ProfileHistoryInfoPanelStatusPanelDayHeatmap。我们会专注于 Profile 组件,它是整个页面的核心。

代码解析

创建 Profile 组件

Profile 组件是整个页面的核心,负责展示用户的头像、基本信息和其他子组件。以下是 Profile 组件的实现:

获取查询参数和用户数据
export default function Profile() {
  const [params, setParams] = useSearchParams();
  const { isLoading, isSuccess, data } = useQuery({
    queryKey: [`${get_user_info}/${params.get("id") ?? localStorage.getItem("userId")} `],
    queryFn: queryFn,
  });

useSearchParams: 这个钩子函数用于获取和设置 URL 查询参数。这里我们获取 id 参数。

useQuery: 来自 React Query,用于执行异步数据请求。我们定义了 queryKeyqueryFn

  • queryKey: 是请求的唯一键值,用于缓存和数据匹配。这里我们使用用户信息的 URL 以及用户 ID 作为键值。

  • queryFn: 是实际执行请求的函数,负责从服务器获取数据。

子组件:StatusPanelDayHeatmap

Profile 组件中,我们还嵌入了 StatusPanelDayHeatmap 子组件:

<Grid item xs={12}>
  <Container sx={{ marginTop: 2, marginBottom: 2 }}>
    <StatusPanel />
  </Container>
</Grid>
<Grid item xs={12}>
  <Container
    sx={{
      display: "flex",
      flexDirection: "column",
      alignItems: "center",
      marginTop: 3,
    }}
  >
    <DayHeatmap type="user" id={localStorage.getItem("userId")} />
  </Container>
</Grid>

StatusPanel: 这是一个自定义组件,显示用户的状态信息。

DayHeatmap: 显示用户活动的热图。这里传递了 typeid 属性,idlocalStorage 中获取。

整体渲染效果

总结

通过结合 React、Material-UI 和 React Query,我们可以轻松创建一个功能丰富、外观现代的用户资料页面。这个页面不仅展示了用户的基本信息,还集成了多个子组件,提供了全面的用户数据展示和交互功能。通过合理的组件划分和数据管理,我们确保了代码的可维护性和扩展性。

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值