使用vant、promise封装回调、全局状态共享、分包
- 应用的生命周期
- onLaunch:启动应用时调用
- onShow:显示时调用,可能调用多次
- onHide: 隐藏时调用(进入到后台),可能调用多次
- onError: 整个应用如果某个部分有报错就调用
- 页面的生命周期
- onLoad:页面加载调用,类似于以前的created。我们可以在这里做初始化操作(发请求),跳转到这个页面携带的参数才是在这拿,拿
形参
就是参数 - onReady:页面结构渲染完毕调用,类似于以前的mounted
- onShow: 显示时调用
- onHide: 隐藏时调用
- onUnload:页面要销毁时调用
- onLoad:页面加载调用,类似于以前的created。我们可以在这里做初始化操作(发请求),跳转到这个页面携带的参数才是在这拿,拿
- 组件的使用
- 如何创建组件
- 一般放在
components
文件夹 - 建议一个组件再一个文件夹,然后对着它右键新建component
- 组件也有四部分:
js
、wxss
、wxml
、json
- 一般放在
- 如何使用?
- 局部使用
- 哪个页面要用,就去哪个页面的json文件,在
usingComponents
里添加
- 哪个页面要用,就去哪个页面的json文件,在
- 局部使用
- 如何创建组件
- 创建的函数
App()
:创建整个应用的函数,入口文件(app.js)就是调用这个函数才能得到一个小程序Page({})
:创建页面Component({})
:创建组件- 创建组件里的写法跟页面里面的写法其实很像,组件里的方法要放在
methods
里,页面的方法,直接写到跟data
平级
- 组件的样式隔离
- 默认情况下页面写的样式不影响组件,组件写的样式不影响页面(标签选择器除外,推荐用类选择器)
- 可以修改
- 小程序里跟vue有一点点不一样
- properties跟data,其实完全一样,用法也一样
- 但是应用场景不一样,properties里定义父传递过来的数据,data声明自己定义的数据
- 组件的父子通信
- 父传子
- 子要
- 父传子
- 组件里数据监听器
- 类似于以前的
watch
- 语法
- 类似于以前的
- wxs:
- 微信提供的一套脚本语法
- 跟js的语法差不多,但是用不了js的那些es6语法
- 用来解决在
wxml
里无法调用js里函数的问题 - 内嵌:
- 组件的生命周期
组件的生命周期
生命周期 | 参数 | 描述 | 最低版本 |
---|---|---|---|
created | 无 | 在组件实例刚刚被创建时执行 | 1.6.3 |
attached | 无 | 在组件实例进入页面节点树时执行 | 1.6.3 |
ready | 无 | 在组件在视图层布局完成后执行 | 1.6.3 |
moved | 无 | 在组件实例被移动到节点树另一个位置时执行 | 1.6.3 |
detached | 无 | 在组件实例被从页面节点树移除时执行 | 1.6.3 |
error | Object Error |
每当组件方法抛出错误时执行 | 2.4.1 |
组件所在页面的生命周期
生命周期 | 参数 | 描述 | 最低版本 |
---|---|---|---|
show | 无 | 组件所在的页面被展示时执行 | 2.2.3 |
hide | 无 | 组件所在的页面被隐藏时执行 | 2.2.3 |
resize | Object Size |
组件所在的页面尺寸变化时执行 | 2.4.0 |
修改对象的另外一种方式与监听所有属性
- 修改对象的另外一种方式
- 这样修改无法直接侦听对象,侦听不到改变
- 要想侦听对象里任意属性的改变,用
**
- 思考,如果我仅仅只是想改数组的下标3的数据,怎么写?
- 回忆添加数组
插槽
- 有的时候我们封装的组件里面某一块页面结构不想写死,所以可以使用
插槽
,让使用自己传递进来 - 小程序里的用法跟
vue
的用法是一样的 - 区别在于:vue里面的默认插槽可以写多个,而小程序里只能写一个,小程序里不能设置插槽默认值
- 语法
- 组件里不想写死的部分写一个
slot
- 组件里不想写死的部分写一个
多个插槽
- 小程序里的组件默认只允许放一个
slot
,如果要放多个slot
需要做两步- 开启多个插槽功能
- 如何传递?通过slot属性传递
- 传递时如果写了多个在同一个slot,他们也会按顺序出现在对应的slot上
behaviors
- 类似于vue里的
mixins
,也就是组件混入 - 功能:可以把多个组件都需要用的东西放到
behaviors
里,然后做混入,那么这些组件就都有了 - 一般情况下都是用一个js文件定义一个混入器,一般分为三大部分: lifetimes、data、methods
- 例:在
根目录
新建behaviors
的文件夹,新建behaviorA.js
,代码如下
- 来到需要使用的组件里,做导入并注册
- 调用规则
- 如果是生命周期函数,会依次调用 先所有混入器的,再调用自己的
- 如果是同名的data和methods,会后面的混入器覆盖前面的,但是如果自己有就是用自己的
- 不同名就混入到一起
小程序项目下载npm包
- 目前,小程序中已经支持使用 npm 安装第三方包,从而来提高小程序的开发效率。
- 但是,在小程序中使用 npm 包有如下 3 个限制:
- 不支持依赖于 Node.js 内置库的包
- nodejs有内置模块例如,path就是一个内置模块,但凡这个包里用了path,那么小程序不能用
- 不支持依赖于浏览器内置对象的包
- 例如这个包里用到了document、window,小程序也不能用
- 不支持依赖于 C++ 插件的包
- 不支持依赖于 Node.js 内置库的包
- 总结:虽然 npm 上的包有千千万,但是能供小程序使用的包却不多
- 下面通过给小程序下载
vant
体验,如何把npm下载的包用到小程序里 - 大概步骤:
- 先要给小程序的项目进行npm的初始化(一次就够)
Vant WeApp介绍与使用到小程序里
地址:https://vant-contrib.gitee.io/vant-weapp/#/home
- 注意:vant组件库有多个版本,vue2版,vue3版,react版、微信小程序版、支付宝小程序版,所以不要选错,进上面的网址,就是微信小程序版
- 因为接下来要学习的内容就在同一个文件夹里,方便学习。所以大家先导入准备好的代码(在02-其他资料的资料文件夹里)
- 导入的时候,记得一定要选择自己的AppId
- 此时要想下载vant,先来到代码文件夹,
npm init -y
做初始化 - 下包
- 去app.json删掉v2版样式
- 点开发工具里的
工具->构建npm
- 想用什么组件,就去
app.json
导入组件,例如我要用button
,就如下- 引入组件的路径不用背,官网可复制
- 然后就可以在页面中愉快的使用
van-button
- 注:app.json,代表全局导入,所以所有地方都可以用
原生css里的变量
- css也可以声明变量
- 语法
- 例
- 注意:变量是有作用域的,你在哪个选择器里声明,就代表这个变量用它的范围里
- 如果希望声明全局变量,网页就写到
body
里,小程序要想声明全局就找小程序最外面的界面(page
)
自定义Vant里的样式
- 一般来说,要定制vant的主题色,是全局都需要改。所以一般是来到
app.wxss
,然后写一个page
的选择器 - page相当于是微信小程序里的根标签,而根据作用域的原则,变量想哪里都能用,就应该写到根标签里
- 如果只是想在某个页面定制主题怎么办?
- 那么来到这个页面对应的
wxss
文件,给这个页面的所有内容包一个大view,然后把变量写到这个大view里面
- 那么来到这个页面对应的
- 变量大全:
添加编译模式(一部分)
API Promise化
- API指的小程序给我们提供好的一些功能(方法)
- 但是这些方法大部分是用回调函数实现的
- 例如:之前学的 wx.request()
- 而我们知道使用回调函数,不利于阅读,有可能容易造成回调地狱
- 所以我们之前都是把这些代码封装成promise来解决回调
- 但是我们自己封装麻烦,而且小程序里很多API都是回调函数,那就意味着都要封装
- 自己一个一个来就累死了, 所以这么累的东西,早就有大牛帮我们封装好了对应的插件,我们调用即可
- 下载插件
- 构建npm
- 到app.js执行代码
全局数据共享是什么?
- 把数据存到一个共享中心里,所有组件都可以访问
- 它可以有效解决复杂组件之间传值
- vue实现
store
的方案:vuex
、pinia
- react实现
store
的方案:redux
mobx
- 微信小程序的方案:
mobx小程序版
(mobx-miniprogram)
- 小程序的数据共享方案
- 下载
- 构建npm
- 去创建store对象
- 在根目录新建
store
文件夹,里面放一个index.js
- 里面放如下代码
- 在根目录新建
将store用在页面和组件中
- 来到
wxml
做渲染
- 这个组件默认看不到,要跑去
contact
页面做导入和使用 - 然后就能出store是否正常工作,以及是否全局共享
- 注:如果用的小程序基础库为2.9.5以前的版本,用在Page的写法要如下面写
分包介绍
官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/subpackages.html
- 小程序对每个包有严格限制,一个包不能超过
2m
,所有如果我们把所有东西放到一个包里,如果超过2m
了不给通过 - 解决办法:
- 把大包拆分成不同的多个小包,这就叫
分包
- 把大包拆分成不同的多个小包,这就叫
- 分包的项目,一定有主包,其他的包就叫分包
- 主包:一般是指包含了启动页或者
tabbar
的包,而且它里面包含分包所需要用到的公共资源 - 分包:分出去的包
- 主包:一般是指包含了启动页或者
- 即使分包了,所有包加起来也不能超过
20m
- 为什么说小程序里开发时图片最好不要放在本地?
- 因为打包时图片会一起打包,有可能会超过包的限制容量
- 对于图片建议:上传到图床服务器,小程序里是用它的地址
- 分包好处
- 解决小程序对每个包大小限制的问题
- 加快第一次的加载速度
- 解耦
分包前后项目构成对比
- 分包前
- 分包后
- 分包之间的资源不共享,但是所有分包都可以访问主包的资源
使用分包
- 项目结构与配置
- 结构如下
-
打包原则
- 小程序打包时它会根据
app.json
里设置的subpackages
来进行分包,subpackages
里的内容有几个就会出几个分包,例如上面有2个分包,但是整体起来加是3个包,因为还有一个主包 - tabbar必须放在
主包
里 - 分包里不能再相互嵌套
- 小程序打包时它会根据
-
引用原则
- 主包不能引用分包里的私有资源
- 分包之间也不能互相引用彼此的私有资源
- 但是分包可以引用主包里的公共资源
-
查看分包大小
- 右上角点
详情
,然后点基本信息
,然后点本地代码
展开信息就可以看到各包的大小
- 右上角点
独立分包
- 独立分包其实也是分包,但是跟普通分包最大的区别在于,不依赖主包能独立运行
- 如何把一个分包变为
独立分包
- 就是在
subpackages
的某个分包配置里加一个"independent": true
- 例
- 就是在
- 限制
- 独立分包属于分包的一种。普通分包的所有限制都对独立分包有效。独立分包中插件、自定义组件的处理方式同普通分包。
- 此外,使用独立分包时要注意:
- 独立分包中不能依赖主包和其他分包中的内容,包括 js 文件、template、wxss、自定义组件、插件等(使用 分包异步化 时 js 文件、自定义组件、插件不受此条限制)
- 主包中的
app.wxss
对独立分包无效,应避免在独立分包页面中使用app.wxss
中的样式; App
只能在主包内定义,独立分包中不能定义App
,会造成无法预期的行为;- 独立分包中暂时不支持使用插件。
分包预下载
- 指的是进入到某个页面后,可以预先把一些分包下载下来,就可以提升用户的体验(切换变快)
- 如何才能配置分包预下载?
- 就是在
app.json
跟subpackages
平级的位置加preloadRule
选项
- 就是在
- 分包预下载限制:包加来不能超过2m
案例:自定义tabbar介绍
- 这个自定义tabbar用的是vant里提供的tabbar,再来改功能和样式
- 用到的知识点:
- 自定义组件
- vant的组件库
- mobx数据共享
- 样式隔离知识
- 数据监听器
- 自定义vant的样式
案例:自定义tabbar的配置和文件夹准备
- 来到
app.json
找到tabbar
这一栏,加一个"custom": true
的选项- 原本tabbar的那些配置还得保留(为了兼容低版本)
- 来到
项目根目录
新建一个文件夹custom-tab-bar
,要对着它右键新建component
,输入名字叫index
- 以后
index.wxml
里布局成什么样子,那么tabbar
就长什么样子
案例:自定义tabbar之使用vant的tabbar
- 来到
app.json
做一个导入
- 来到
custom-tab-bar/index.wxml
里复制官网的tabbar基本用法到页面中即可 - 记得还得复制
active
变量和对应的事件方法到methods里
案例:自定义tabbar之自定义图标
- 就是把
van-tabbar-item
里面的icon
属性先删掉,然后用插槽自定义图标
案例:自定义tabbar之循环渲染item
- 因为官方推荐,即使用自定义也要把
tabbar
的那些选项保留,这是为了兼容低版本,既然如此,那么我们自定义的tabbar
也应该是根据配置文件里的``tabbar
去产生对应的tabbar-item
,所以把配置文件里的``tabbar
里的list
复制到index.js
的data里,然后去index.wxml
里做wx:for
渲染 - 代码如下
案例:自定义tabbar之美化徽标样式
- 如何加徽标?
- 给
van-tabbar-item
加info
属性即可有徽标
- 给
- 默认情况下,每一项的图标有一个
margin-bottom
,会拉出距离,让徽标突出去 - 所以我们要把
margin-bottom
这个值改为0 - 来到
index.wxss
里,声明对应的变量
- 发现没效果,所以根据文档提示发现,没效果是因为样式隔离导致的,所以可以给组件禁用样式隔离,使用双向的方式
案例: 自定义tabbar之把store中的sum渲染到徽标
- 因为
sum
是在store
,所以我们自定义tabbar的组件要绑定store
- 然后来到
index.wxml
里做渲染
案例:自定义tabbar之按需渲染数字徽标
- 此时发现,如果sum为0,它也显示徽标,所以要做处理
案例:自定义tabbar之实现页面切换
- 来到
van-tabbar
绑定的change
事件(因为这个事件会在点击切换tabbar后触发),并且参数.detail就有选中的下标,我们根据下标就可以取出对应要去的页面的路径,进行编程式导航即可 - 代码如下
- 注意:我们读取到的
pagePath
里前面没有加/
,那就代表找当前目录里的pages
,但是此时tabbar文件夹里有pages
吗?没有,所以我们得前面加一个/
,代表找根目录里的pages
案例:自定义tabbar之解决选中项不准确问题
- 原因:
- 本来
tabbar
就自带设置选中项的效果,而用wx.switchTab
做切换也会去设置选中项 - 两个一起设置冲突了
- 本来
- 解决办法:
- 让
switchTab
跳转时无法设置选中项 - 问题:如何让他无法自动设置?使用
store
里的数据去记录active
(也就是选中项的下标) - 因为如果这个数据是存到
store
,只能通过action
定义的函数来改,别的地方无法修改
- 让
- 步骤
- 把
custom-tab-bar
文件夹里的index.js
里data
里的active删掉 - 然后来到
store/index.js
里声明一个active
,默认值为0,并且提供一个修改它的actions方法
- 把
__EOF__

本文作者:Sternstunde
本文链接:https://www.cnblogs.com/strundent/p/17078311.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/strundent/p/17078311.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)