挑战21天手写前端框架 day18 引入 antd-mobile5 2分钟画完两个页面

简介: 挑战21天手写前端框架 day18 引入 antd-mobile5 2分钟画完两个页面

image.png

昨天我们已经完成了移动端的适配,今天我们就引入 antd-mobile 组件,当作我们的基础组件,加快我们的开发效率。


Ant Design Mobile 是由支付宝设计团队基于蚂蚁集团的众多业务实践,亿万用户的验证反馈,抽象构建出的移动端资产库。


2020 年 9 月 18 日,antd-mobile 发布了 2.3.4 版本,也是 v2 的最后一个版本,时隔近一年半,官方终于发布了全新的 5.0(白杨)版本。又经过了大半年的维护,现在 antd-mobile 已经提供了非常多功能完善的组件供用户使用了。


使用 2 倍组件的高清方案

因为我们使用的是高清方案,根绝官网提供的两种方案,第一种方案是将 import 引导 2x 目录下,例如:

import { Button } from 'antd-mobile'
// ⬇️
import { Button } from 'antd-mobile/2x'
import 'antd-mobile/es/global'
// ⬇️
import 'antd-mobile/2x/es/global'
复制代码


第二种方案使用 webpack 的别名设置,将 antd-mobile 映射到 antd-mobile/2x 上。

先来说说这两种方案,在项目交付中都有什么问题吧,第一种,就是过于麻烦,也很难懂 /2x 是啥意思,某一个特殊版本吗? 第二种,在使用一些特殊加速手段缓存的时候,比如 umi 中很重要的 mfsu,别名映射会出现找不到包引入错误的问题。


所以我们可以用一种更加“高效”有趣的方式来实现。在昨天的屏幕适配中我们提到,我们通过 postcss 的插件将 px 转换成 rem 单位,然后既然我们的 px 都要经过一次转化了,那是不是就可以直接通过它,将 antd-mobile 的 px 值直接放大一倍呢?


根绝这个思路,我在 postcss-plugin-px2rem 的基础上增加了 selectorDoubleRemList: [/.adm-/] 。antd-mobile 的类名都是以 .adm- 开头的,因此会被匹配中,将 px 转化成两倍的 rem,比如按钮的默认 font-size 就是 34 px 即 0.68rem。这样即实现了,在不修改任何使用和新增任何环节的情况下,完成了使用高清组件的目的,这就是我所指的 “高效”。


运行验证

cd examples/app
pnpm i antd-mobile
复制代码


修改 examples/app/src/pages/home.tsx

import { Button  } from 'antd-mobile';
// 略,随便放到页面中
<Button color="primary">Click Me!</Button>
复制代码


运行 dev 服务

pnpm dev
复制代码


使用谷歌浏览器的手机模拟器,Dimensions: iPhone 6/7/8 访问 http://127.0.0.1:8888,打开控制台查看 elements ,可以看到 adm-button 样式中的 px 都被转成 2 倍的 rem 了: padding: 0.14rem 0.24rem; font-size: 0.34rem;



2分钟画完两个页面

好了既然引入了 antd-mobile 那我们随便写两行代码完成两个页面吧!

image.png


编写全局 layout

修改我们约定的全局 layout,要编写全局 layout 首先一定要分清楚那一部分的内容是所有页面公用的,而哪一部分的内容是页面私有的。这里我们将头部的 NavBar 和底部的 TabBar 放到,全局 layout 中编写。可以借助 @alita/flow 提供的几个布局组件,快速的将页面分为上中下结构。

import { Page, Content, Header, Footer } from '@alita/flow';
import { Badge, TabBar, NavBar } from 'antd-mobile';
import { AppOutline, UnorderedListOutline } from 'antd-mobile-icons';
<Page className='malita-layout'>
    <Header><NavBar>{titleHash[activeKey]}</NavBar></Header>
    <Content>
        {element}
    </Content>
    <Footer>
        <TabBar onChange={value => {
            setActiveKey(value)
            navigate(value)
        }} activeKey={activeKey} >
            {tabs.map((item: any) => (
                <TabBar.Item
                    key={item.key}
                    icon={item.icon}
                    title={item.title}
                    badge={item.badge}
                />
            ))}
        </TabBar>
    </Footer>
</Page>
复制代码


编写 home 页面

我们随便仿照现在流行的一些页面布局,随手写下整体的页面,这真没什么好说的,只要你熟悉 antd-mobile 的组件用法就好了,再构造一点数据。

import { Image, Swiper, Toast, Grid, Space, List } from 'antd-mobile';
<Swiper>{items}</Swiper>
<Space></Space>
<Grid columns={3} gap={8}>
    {grids}
</Grid>
<List header='用户列表'>
    {users.map(user => (
        <List.Item
            key={user.name}
            prefix={
                <Image
                    src={user.avatar}
                    style={{ borderRadius: 20 }}
                    fit='cover'
                    width={40}
                    height={40}
                />
            }
            description={user.description}
        >
            {user.name}
        </List.Item>
    ))}
</List>
复制代码


编写列表页面

import { IndexBar, List } from 'antd-mobile';
<IndexBar>
    {groups.map(group => {
        const { title, items } = group
        return (
            <IndexBar.Panel
                index={title}
                title={`标题${title}`}
                key={`标题${title}`}
            >
                <List>
                    {items.map((item, index) => (
                        <List.Item key={index}>{item}</List.Item>
                    ))}
                </List>
            </IndexBar.Panel>
        )
    })}
</IndexBar>
复制代码


可以通过上面的实现看出我们只是简单的引用了几个组件,便可以完成我们的需求,当然实际需求中页面设计的定制化会更高一点,实现起来也要复杂一点,但是却是比我们自己纯手写要快的多,特别在一些功能比较复杂的组件实现上。这就是引入比较好的第三方组件作为基础组件的优势。


当然你可以基于这些基础组件进行二次封装开发,形成你们自己的基础组件或者业务组件,在同一个项目中的不同页面,你就可以仅仅引用你自己已经封装好的组件来高效的完成需求了,如果你们的设计师在多个项目中按统一的风格输出,那你还可以在多个项目中共用这些组件,来大大提高开发效率,这就是现在 React 开发中社区一直强调组件复用的原因。


感谢阅读,今天的内容先对比较简单,但是希望我的整个阐述,能够给你提供一点思路,在工作中,只要你自己觉得麻烦,重复,枯燥,繁琐等等念头的时候,你就可以停下来,好好思考下,是不是有其他解法。新的解法实现之后,同步到你的整个团队中,那就是“提效”了。


源码归档

目录
相关文章
|
7月前
|
开发框架 前端开发 JavaScript
循序渐进VUE+Element 前端应用开发(5)--- 表格列表页面的查询,列表展示和字段转义处理
循序渐进VUE+Element 前端应用开发(5)--- 表格列表页面的查询,列表展示和字段转义处理
|
1月前
|
前端开发 JavaScript 开发者
前端 CSS 优化:提升页面美学与性能
前端CSS优化旨在提升页面美学与性能。通过简化选择器(如避免复杂后代选择器、减少通用选择器使用)、合并样式表、合理组织媒体查询,可减少浏览器计算成本和HTTP请求。利用硬件加速和优化动画帧率,确保动画流畅。定期清理冗余代码并使用缩写属性,进一步精简代码。这些策略不仅加快页面加载和渲染速度,还提升了视觉效果,为用户带来更优质的浏览体验。
|
16天前
|
Dart 前端开发
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
112 75
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
3月前
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
|
13天前
|
Dart 前端开发 容器
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
58 18
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
18天前
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
55 12
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
|
22天前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
25 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
15天前
|
缓存 前端开发 IDE
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
20 0
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
3月前
|
前端开发 数据安全/隐私保护
.自定义认证前端页面
.自定义认证前端页面
22 1
.自定义认证前端页面
|
3月前
|
前端开发 JavaScript 搜索推荐
前端懒加载:提升页面性能的关键技术
前端懒加载是一种优化网页加载速度的技术,通过延迟加载非首屏内容,减少初始加载时间,提高用户访问体验和页面性能。

热门文章

最新文章