- 前言
大家好,我是若川。为了能帮助到更多对源码感兴趣、想学会看源码、提升自己前端技术能力的同学。我倾力持续组织了一年每周大家一起学习200行左右的源码共读活动,感兴趣的可以 点此扫码加我微信
ruochuan02
参与。
想学源码,极力推荐关注我写的专栏(目前是掘金专栏关注人数第一,3.6K+人)《学习源码整体架构系列》 包含jQuery
、underscore
、lodash
、vuex
、sentry
、axios
、redux
、koa
、vue-devtools
、vuex4
、koa-compose
、vue 3.2 发布
、vue-this
、create-vue
、玩具vite
等20余篇源码文章。
- stepper 步进器
感兴趣的小伙伴,可以克隆我的仓库调试学习 git clone https://github.com/lxchuan12/vant-weapp-analysis.git。
我们开发微信小程序时经常会使用到 stepper
步进器组件。本文就来分析 vant-weapp
stepper
步进器源码实现。
相比于原生 JS
等源码。我们或许更应该学习,正在使用的组件库的源码,因为有助于帮助我们写业务和写自己的组件。
stepper 图
如何开发一个微信小程序组件,可以参考官方文档。
微信小程序自定义组件 文档
看完本文,你将学到:
1 | bash复制代码1. 学会如何通过调试看源码 |
- 克隆项目 && 调试
1 | bash复制代码git clone https://github.com/vant-ui/vant-weapp.git |
由于 yarn run dev
没有压缩代码,本文就基于运行 dev
后没有压缩的代码进行讲述。
打开微信开发者工具,把 vant-weapp/example
目录添加进去就可以预览示例了。注意:如果没有自己的 appid
,可以选择测试号。
添加编译模式,启动页面为 pages/stepper/index
,即可单独调试该页面。
关于更多 JS
调试,之前文章写过,新手向:前端程序员必学基本技能——调试JS代码,这里就不赘述。
附上一张图。
我们找到对应的文件,查看下组件源码的整体结构。
- 整体结构
4.1 组件的 wxml 结构
wxml
部分相对简单清晰,这里就不过多讲述。
1 | html复制代码<!-- vant-weapp/example/dist/stepper/index.wxml --> |
4.2 组件的 JS 结构
1 | js复制代码// vant-weapp/example/dist/stepper/index.js |
4.3 VantComponent 组件
我们可以在 vant-weapp/example/dist/stepper/index.js
文件的 VantComponent({})
上方加上 debugger;
调试源码。按进入函数按钮。
1 | js复制代码// vant-weapp/example/dist/stepper/index.js |
调试如图所示:
1 | js复制代码// vant-weapp/example/dist/common/component.js |
4.3.1 Behavior 如同 mixins
1 | js复制代码// vant-weapp/example/dist/mixins/basic.js |
看完了 VantComponent
函数。
再来看看组件的初始化。
- 组件初始化
1 | js复制代码VantComponent({ |
接着我们继续调试加减号基础功能。
- 点击加号/减号
6.1 onTap 函数
1 | html复制代码<view |
我们可以在 onTap
函数处断点,或者加上 debugger
。
1 | js复制代码onTap(event) { |
再在 onChange
函数断点,点击进入函数按钮操作。
接着我们来看 onChange
函数实现。
6.2 onChange 函数
1 | js复制代码onChange() { |
6.3 isDisabled 函数
最大最小值比较等。
1 | js复制代码isDisabled(type) { |
6.4 emitChange 函数
1 | js复制代码emitChange(value) { |
如果不是异步,则直接赋值给 currentValue
。
并且派发 change
事件。
断点调试在 $emit
函数。点击开发者工具的进入函数按钮。
6.5 $emit 函数
在上文提到过 Behavior
basic
。类似于 vue
中的 $emit
。
1 | js复制代码$emit(name, detail, options) { |
1 | js复制代码<!-- 当自定义组件触发“myevent”事件时,调用“onMyEvent”方法 --> |
1 | js复制代码<!-- 在自定义组件中 --> |
1 | js复制代码Component({ |
我们接着看输入框输入。
- 输入框输入 onInput 函数
1 | html复制代码<input |
1 | js复制代码onInput(event) { |
- 输入框聚焦/失焦
1 | html复制代码<input |
focus
、blur
事件
1 | js复制代码onFocus(event) { |
- 长按加号/减号 累计功能
1 | html复制代码<view |
1 | js复制代码const LONG_PRESS_START_TIME = 600; |
- 总结
行文至此,就基本接近尾声了。我们从 vant-weapp
常用的 stepper
步进器组件源码出发。整体源码并不长。
我们通过调试方法,分析了整体结构,VantComponent
函数组件的实现,还有加号减号的功能基本实现,input输入功能、聚焦失焦、还有长按累计的功能等。
或许我们自己实现,可能就写的一团糟。所以,相比于原生 JS
等源码。我们或许更应该学习,正在使用的组件库的源码,因为有助于帮助我们写业务和写自己的组件。
不过大多时候,学习源码或许是重要但不紧急的事情。除了公司项目外,我们可以多尝试学习开源项目的源码,从而贡献自己的代码,拥抱开源,会让自己更上一层楼。
感兴趣的小伙伴,可以克隆我的仓库调试学习 git clone https://github.com/lxchuan12/vant-weapp-analysis.git。
如果看完有收获,欢迎点赞、评论、分享支持。你的支持和肯定,是我写作的动力~
最后可以持续关注我@若川。关注我的公众号@若川视野。欢迎点此扫码加我微信 ruochuan02
交流,参加由公众号@若川视野发起的,每周大家一起学习200行左右的源码共读活动,共同进步。
我正在参与掘金技术社区创作者签约计划招募活动,点击链接报名投稿。
本文转载自: 掘金