017 Umi 实战练习02 - 使用 Antd 完成卡片列表页面

简介: 017 Umi 实战练习02 - 使用 Antd 完成卡片列表页面

经过前几天的介绍,我们现在已经对 Umi 部分体系有了一定的了解,今天我们就来编写一个中后台中比较简单的页面,先上效果图吧。


需求

image.png


先停下来思考 3 秒,如果是你拿到这个需求,你要开始编写这个页面,你会怎么做,大概是怎么编写页面的,样式布局之类的你会怎么设计?

3

2

1


新建页面

新建文件 src/pages/listcard/index.tsx

import React from "react";
const ListCard = () => {
  return <div>ListCard Page</div>;
};
export default ListCard;



全局布局中增加菜单配置

修改 src/layouts.tsx 文件中的 menuHash 加上我们新增的页面“卡片列表”。

- import { PieChartOutlined, UserOutlined, } from "@ant-design/icons";
+ import { PieChartOutlined, UserOutlined, TableOutlined } from "@ant-design/icons";
const menuHash: any = {
  "/": {
    label: "首页",
    icon: <PieChartOutlined />,
  },
  user: {
    label: "用户",
    icon: <UserOutlined />,
  },
+ listcard: {
+   label: "卡片列表",
+   icon: <TableOutlined />,
+ },
};

image.png

很容易看出来,就算我们没有修改上面的 menuHash 数据,我们的菜单也会出现 lastcard 的选项。这是我们上节课在菜单与权限上,将菜单与路由关联起来的好处。


整个流程是新建页面文件,通过约定式路由的能力,自动生成了新的路由配置,路由配置通过我们的方法类转换成菜单数据绑定到 Layout 中的 Menu 组件。



模拟页面数据

我们通过简单的循环生成我们需要的数据。用于列表页面的渲染。

const list: any[] = [];
  for (let i = 1; i < 10; i += 1) {
    list.push({
      id: i,
      title: "卡片列表",
      description:
        "Umi@4 实战教程,专门针对中后台项目零基础的朋友,不管你是前端还是后端,看完这个系列你也有能力合理“抗雷”,“顶坑”",
    });
  }



重度使用 Antd 组件

在中后台项目中,一定要非常重度的使用 Antd 的组件,因为这会让你少写非常多的样式,特别是在你的客户还没有审美疲劳的前提下,没改任何一处 Ant Design 的设计规范时。


列表页面我们都可以通过使用 Antd 的 List 来渲染。

<List
      rowKey="id"
      grid={{
        gutter: 16,
        xs: 1,
        sm: 2,
        md: 3,
        lg: 3,
        xl: 4,
        xxl: 4,
      }}
      dataSource={[{}, ...list]}
      renderItem={(item) => {
        return <div>item</div>
      }}
    />


这里需要注意的是 dataSource 我们并不是直接取 list,而是在 list 的前面放了一个空的对象,这是为了来渲染前面的 新增 卡片而添加的。

然后我们就只要关注 renderItem 需要返回的内容了。

Item 项我们需要返回的是一个卡片


<Card
  hoverable
  actions={[<a key="option1">操作一</a>, <a key="option2">操作二</a>]}
>
  <Card.Meta
    avatar={
      <Avatar
        size={48}
        src="https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png"
      />
    }
    title={<a>卡片列表</a>}
    description={
      <Paragraph ellipsis={{ rows: 3 }}>Umi@4 实战教程,专门针对中后台项目零基础的朋友,不管你是前端还是后端,看完这个系列你也有能力合理“抗雷”,“顶坑”</Paragraph>
    }
  />
</Card>;


如果是第一个空对象的时候,我们要渲染成我们的新增卡片。

<Button type="dashed" style={{ width: "100%", height: "201px" }}>
  <PlusOutlined /> 新增产品
</Button>;


简单的整理之后,就可以得到我们的 renderItem

renderItem={(item) => {
  if (item && item.id) {
    return (
      <List.Item key={item.id}>
        <Card
          hoverable
          actions={[
            <a key="option1">操作一</a>,
            <a key="option2">操作二</a>,
          ]}
        >
          <Card.Meta
            avatar={
              <Avatar
                size={48}
                src="https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png"
              />
            }
            title={<a>{item.title}</a>}
            description={
              <Paragraph ellipsis={{ rows: 3 }}>
                {item.description}
              </Paragraph>
            }
          />
        </Card>
      </List.Item>
    );
  }
  return (
    <List.Item>
      <Button type="dashed" style={{ width: "100%", height: "201px" }}>
        <PlusOutlined /> 新增产品
      </Button>
    </List.Item>
  );
}}


值得注意的是以上所有的代码,关于样式我们只写了 style={{ width: "100%", height: "201px" }}。甚至我们都没有新建样式文件。


回过头去看整个需求和实现,是不是发现非常的简单了?所以有一个好的组件库对于能否早点下班是非常关键的,你一定要有一个你非常喜欢并且非常熟悉的组件库,你甚至可以不用理会它的实现,但是它长什么样子,有什么效果,你一定要熟记于心。当然并不一定非要是 Antd,你可以选择的你自己喜欢的组件库取深入了解,但是我很推荐 Antd ,他是我觉得 React 社区质量最高的组件库,没有之一。



源码归档

目录
相关文章
|
6月前
|
JavaScript
【实用模板】Vue代码文件常用弹窗页面组件
【实用模板】Vue代码文件常用弹窗页面组件
|
小程序 开发工具 开发者
小程序vant-weapp-商品卡片列表
小程序vant-weapp-商品卡片列表
220 0
|
SQL JavaScript 前端开发
使用ElementUI结合Vue完善主页的导航菜单和书籍管理的后台数据分页查询
使用ElementUI结合Vue完善主页的导航菜单和书籍管理的后台数据分页查询
56 0
|
JavaScript
【Vue3从零开始-实战】S16:详情页样式优化及tab栏内容联动功能实现
【Vue3从零开始-实战】S16:详情页样式优化及tab栏内容联动功能实现
291 0
【Vue3从零开始-实战】S16:详情页样式优化及tab栏内容联动功能实现
|
3月前
|
小程序
Taro@3.x+Vue@3.x+TS开发微信小程序,根据系统主题展示不同样式(darkMode)
本文介绍如何在Taro项目中配置深色模式。通过在`src/app.config.ts`设置`darkmode`选项和在`theme.json`中定义主题变量,可以实现跟随系统主题的界面风格切换。
103 0
Taro@3.x+Vue@3.x+TS开发微信小程序,根据系统主题展示不同样式(darkMode)
|
4月前
|
JavaScript
vue3 中借助 tsx 使用 JSX (以实现字体下拉选择为例)
vue3 中借助 tsx 使用 JSX (以实现字体下拉选择为例)
120 0
|
6月前
|
JavaScript 定位技术
Vue百度地图组件说明文档
Vue百度地图组件说明文档
988 0
|
11月前
|
JavaScript 算法 API
使用ElementUI结合Vue完善主页的导航菜单和书籍管理以及后台数据分页查询
使用ElementUI结合Vue完善主页的导航菜单和书籍管理以及后台数据分页查询
40 0
|
11月前
|
小程序 索引 容器
vue_uniapp学习之uniapp使用uni.pageScroller实现单击定位效果
业务场景:在小程序的问卷调查中,答题后判断是否全部答完题,如果没答完题就跳转到第一个未答题的题目上,这时候用到的就是 uni.pageScroller
112 0
|
JavaScript
vue动态点击添加样式
v-for循环的多个input框点击添加样式