Mand Mobile组件库在真实项目中的实践与优化经验分享

殿薇 Dev 移动 阅读 1,453
赞 40 收藏
二维码
手机扫码查看
反馈

项目初期的技术选型

最近刚做完一个金融类的移动端项目,客户要求UI风格要贴近主流银行App,交互体验要流畅自然。我第一时间就想到了Mand Mobile,毕竟这是滴滴团队专为金融场景打造的组件库。

Mand Mobile组件库在真实项目中的实践与优化经验分享

选择Mand Mobile主要有三个原因:一是它的组件设计确实很符合金融产品的调性,二是有丰富的现成组件可以快速搭建界面,三是社区活跃度还不错,遇到问题能找到解决方案。虽然Ant Design Mobile也很优秀,但相比之下还是Mand更贴合这次的需求。

快速上手与基础配置

开始集成的时候还挺顺利的,按官方文档一步步来基本没什么大问题。这里分享下我的基础配置:

// main.js
import { createApp } from 'vue'
import MandMobile from 'mand-mobile'
import 'mand-mobile/components/style'

const app = createApp(App)
app.use(MandMobile)

样式这块建议直接引入全量样式,虽然会多加载一些没用到的组件样式,但能避免很多莫名其妙的样式问题。这个坑我之前踩过,后面详聊。

最大的坑:性能问题

做到一半才发现列表页滚动特别卡,尤其是嵌套了多个组件的页面。开始我以为是数据量太大导致的,后来排查发现是Mand的一些组件默认绑定了过多的事件监听。

解决这个问题折腾了我两天。最后采用了两个方案:

  • 对复杂页面做了按需加载
  • 手动优化了部分组件的事件绑定

代码大概是这样:

// 优化前
<md-field>
  <md-input-item v-for="item in largeList" />
</md-field>

// 优化后
<md-field v-if="visible">
  <md-input-item v-for="item in visibleList" />
</md-field>

又踩坑了,touchmove滚动失效

在做下拉刷新功能时遇到个奇葩问题:手指滑动时页面会卡住不动。查了好久才发现是Mand的pull-to-refresh组件和原生滚动事件冲突了。

最后的解决方案是在需要滚动的容器上加了个自定义指令:

// directive.js
export default {
  mounted(el) {
    el.addEventListener('touchmove', e => {
      e.stopPropagation()
    }, { passive: false })
  }
}
<!-- 使用 -->
<div v-scroll-fix class="scroll-container">
  <!-- 内容 -->
</div>

这个坑真的让我怀疑人生,建议大家在使用类似功能时提前做好事件隔离。

核心功能实现:表单验证

说下最有成就感的部分——表单验证。Mand自带的表单校验规则比较基础,我基于它的validator做了扩展:

// validator.js
import { Validator } from 'mand-mobile'

Validator.addRule('idCard', (value) => {
  const reg = /(^d{15}$)|(^d{18}$)|(^d{17}(d|X|x)$)/
  return reg.test(value)
}, '请输入正确的身份证号')

Validator.addRule('bankCard', (value) => {
  const reg = /^([1-9]{1})(d{14}|d{18})$/
  return reg.test(value)
}, '请输入正确的银行卡号')

用起来特别方便:

<md-input-item 
  type="text"
  v-model="formData.idCard"
  placeholder="请输入身份证号"
  :validator="['idCard']">
</md-input-item>

回顾与反思

整体来说这个项目用Mand Mobile还算顺利,几个核心功能都完美实现了。不过也有一些遗憾:

  • 组件的定制化程度还不够高,有些特殊需求得自己重写组件
  • 按需加载的配置略麻烦,容易遗漏
  • 文档有些地方不够详细,特别是高级用法部分

如果让我重新选,我可能还是会用Mand,但在前期调研时会投入更多时间评估组件的适用性。

以上是我个人在这个项目中的完整经验总结,欢迎各位在评论区交流你的看法和实践经验。后续我还会分享更多实战中遇到的问题和解决方案,记得关注更新。

本文章不代表JZTHEME立场,仅为作者个人观点 / 研究心得 / 经验分享,旨在交流探讨,供读者参考。
发表评论

暂无评论