微信小程序、UNI-app、taro-app学习总结

现今社会在数据的联通和生成和以前有了很多的不同,以前只有线上网页能够让人们能够接触,现在移动设备的普及让信息的传播和生成更加多元多变。人们对获取信息的方式也开始有了新的要求:手机上的app越装越多,移动设备也越来越多,这让人不禁想到能不能不装这些东西,我想用就有,不想用就不要呢===》小程序应运而生。
小程序首先在微信app中上线,风头一时无两,优点突出,让很多人对APP有了新认识。这样的流行让我们前端开发对象网页也有了新的认识。应运而生了很多的能够自主编写小程序的工具,今天我就带大家认识下使用比较的多的几个:微信自己的开发者工具,uni-app,taro-app
编辑工具对比:

微信uni-apptaro-app
微信开发者工具Hbuilder XVS code

结构对比:

微信:

在这里插入图片描述
一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下:

文件必需作用
app.js小程序逻辑
app.json小程序公共配置
app.wxss小程序公共样式表

一个小程序页面的组成

文件类型必需作用
js页面逻辑
wxml页面结构
json页面配置
wxss页面样式表

层级关系就更简单明了了

├── app.js
├── app.json
├── app.wxss
├── pages
│   │── index
│   │   ├── index.wxml
│   │   ├── index.js
│   │   ├── index.json
│   │   └── index.wxss
│   └── logs
│       ├── logs.wxml
│       └── logs.js
└── utils
uni-app:

在这里插入图片描述
页面层级关系

    
┌─pages               
│  ├─index
│  │  └─index.vue    
│  └─login
│     └─login.vue    
├─static             
├─main.js       
├─App.vue          
├─manifest.json  
└─pages.json            
    
taro-app:

在这里插入图片描述
在这里插入图片描述
页面层级关系

├── dist                   编译结果目录
├── config                 配置目录
|   ├── dev.js             开发时配置
|   ├── index.js           默认配置
|   └── prod.js            打包时配置
├── src                    源码目录
|   ├── pages              页面文件目录
|   |   ├── index          index 页面目录
|   |   |   ├── index.js   index 页面逻辑
|   |   |   └── index.css  index 页面样式
|   ├── app.css            项目总通用样式
|   └── app.js             项目入口文件
└── package.json

我们能从中看出什么呢:那就是结构看起来都是一样的:从根目录的app.js/app.vue/app.jsx对其他页面开始层级管理(这里的app文件又教程入口文件),也在这里定义了整个应用的开始和结束(应用生命周期)。
说道生命周期,在学习vue和react时我们都学习到过,它代表了某个页面实例从开始创建,初始化数据,编译模板,挂在dom->渲染,更新->渲染,卸载等一系列过程。在这个过程中我们能找到不同时间段的钩子函数,这让我们能够更好的对应用产生合理的影响优化等等。在小程序中我们也用到了,不过可能是应为使用平台的不一样,让小程序不再是单独生命周期,它有了不一样的生命周期分类:应用生命周期-----页面生命周期-----组件生命周期

我们拿微信小程序来举例:应用生命周期
小程序被使用和关闭就代表这个周期的开始与结束,它是入口文件(根目录下的app.js/app.vue/app.jsx)所使用的的,从上面的截图中我们也能够看到一些端倪:

// app.js
App({
  onLaunch (options) {
    // Do something initial when launch.
  },
  onShow (options) {
    // Do something when show.
  },
  onHide () {
    // Do something when hide.
  },
  onError (msg) {
    console.log(msg)
  },
  globalData: 'I am global data'
})

含义详解

属性类型默认值必填说明最低版本
onLaunchfunction生命周期回调——监听小程序初始化。
onShowfunction生命周期回调——监听小程序启动或切前台。
onHidefunction生命周期回调——监听小程序切后台。
onErrorfunction错误监听函数。
onPageNotFoundfunction页面不存在监听函数。1.9.90
onUnhandledRejectionfunction未处理的 Promise 拒绝事件监听函数。2.10.0
其他any开发者可以添加任意的函数或数据变量到 Object 参数中,用 this 可以访问

大家能看出什么呢。应用的生命周期不再是给用户和开发人员看的了,它给了整个应用,让整个应用独立起来,形成一个自给自足的环境。
其他工具上的应用生命周期中的钩子函数可能不一样,但是作用是一样的。

uni-app:

函数名说明
onLaunchuni-app 初始化完成时触发(全局只触发一次)
onShowuni-app 启动,或从后台进入前台显示
onHideuni-app 从前台进入后台
onErroruni-app 报错时触发
onUniNViewMessagenvue 页面发送的数据进行监听,可参考 nvue 向 vue 通讯
  • 应用生命周期仅可在App.vue中监听,在其它页面监听无效。
演示代码
<script>
    // 只能在App.vue里监听应用的生命周期
    export default {
        onLaunch: function() {
            console.log('App Launch')
        },
        onShow: function() {
            console.log('App Show')
        },
        onHide: function() {
            console.log('App Hide')
        }
    }
</script>

注意:可能是由于微笑小程序和uni-app的开发原理偏向于Vue.js,所以在很大程度上两者有着明显的相同之处。

vue生命周期钩子函数说明
函数名称作用说明
BeforeCreate(){}创建之前
Created(){}创建之后,此处可以得到data属性,可以修改data,可以发送异步请求,这里还存在#el 但是这个#el是一个虚拟的dom结构,仅仅存在于内存中
Beforemounte(){}数据创建完成,但是变量未编译
Mounted(){}编译完成,并替换真实dom结构
Beforeupdate(){}当data数据变化时进行操作,只保存data未改变之前的值
Updated(){}当data数据变化时进行操作,只保存data改变之后的值
Beforedestroy(){}即将卸载Vue实例,在使用v-if 或者动态组件切换的时候会触发,简单来说这就是一个用来销毁的钩子,所以这里一般用来清除定时器的
Destroyed(){}卸载完成

taro:

taro的应用生命周期可能就不太一样了。
taro使用的编程原理偏向于react,不再是单独

// onLaunch 在微信/百度/字节跳动/支付宝小程序中这一生命周期方法对应 app 的 onLaunch
  componentWillMount() {}
  // onLaunch 在微信/百度/字节跳动/支付宝小程序中这一生命周期方法对应 app 的 onLaunch,在 componentWillMount 后执行
  componentDidMount () {}
  // onShow
  componentDidShow () {}
  // onHide
  componentDidHide () {}
  // onError
  componentDidCatchError () {}
  // onPageNotFound 404
  componentDidNotFound () {}
  // 在 App 类中的 render() 函数没有实际作用
  // 请勿修改此函数

这些钩子函数在应用运行期间起到的作用其实都差不多。其中需要注意到的是componentDidMount这个,它运行在willMount之后,但是它和willMount的作用基本一样,都是监控应用的初始化,能够访问应用的初始化参数
说完应用的生命周期该说说页面生命周期了,从上面说命的小程序整个的页面结构上来看,它的每一个显示页面也都是拥有独立的生命周期的,小程序由于使用环境限制页面一般情况都不是立刻加载完成,只有你需要查看时才出现渲染的,所以他们也有各自的生命周期钩子函数

微信:

从结构上看微信所有的页面都是存放在pages文件夹,页面代码中指定了初始数据,生命周期回调、事件处理函数等等,

属性类型默认值必填说明
dataObject页面的初始数据
onLoadfunction生命周期回调—监听页面加载
onShowfunction生命周期回调—监听页面显示
onReadyfunction生命周期回调—监听页面初次渲染完成
onHidefunction生命周期回调—监听页面隐藏
onUnloadfunction生命周期回调—监听页面卸载
onPullDownRefreshfunction监听用户下拉动作
onReachBottomfunction页面上拉触底事件的处理函数
onShareAppMessagefunction用户点击右上角转发
onPageScrollfunction页面滚动触发事件的处理函数
onResizefunction页面尺寸改变时触发,详见 响应显示区域变化
onTabItemTapfunction当前是 tab 页时,点击 tab 时触发
其他any开发者可以添加任意的函数或数据到 Object 参数中,在页面的函数中用 this 可以访问
Page({

  /**
   * 页面的初始数据
   */
  data: {
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})

这里的生命周期回调体现了单个页面的逻辑,让页面能够完美的展示所有的效果。也让开发人能在开发阶段充分梳理逻辑,优化代码。

uni-app:
函数名说明平台差异说明最低版本
onLoad监听页面加载,其参数为上个页面传递的数据,参数类型为Object(用于页面传参),参考示例
onShow监听页面显示。页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面
onReady监听页面初次渲染完成。注意如果渲染速度快,会在页面进入动画完成前触发
onHide监听页面隐藏
onUnload监听页面卸载
onResize监听窗口尺寸变化App、微信小程序
onPullDownRefresh监听用户下拉动作,一般用于下拉刷新,参考示例
onReachBottom页面滚动到底部的事件(不是scroll-view滚到底),常用于下拉下一页数据。具体见下方注意事项
onTabItemTap点击 tab 时触发,参数为Object,具体见下方注意事项微信小程序、支付宝小程序、百度小程序、H5、App(自定义组件模式)
onShareAppMessage用户点击右上角分享微信小程序、百度小程序、头条小程序、支付宝小程序
onPageScroll监听页面滚动,参数为Objectnvue暂不支持
onNavigationBarButtonTap监听原生标题栏按钮点击事件,参数为ObjectApp、H5
onBackPress监听页面返回,返回 event = {from:backbutton、 navigateBack} ,backbutton 表示来源是左上角返回按钮或 android 返回键;navigateBack表示来源是 uni.navigateBack ;详细说明及使用:onBackPress 详解app、H5、支付宝小程序
onNavigationBarSearchInputChanged监听原生标题栏搜索输入框输入内容变化事件App、H51.6.0
onNavigationBarSearchInputConfirmed监听原生标题栏搜索输入框搜索事件,用户点击软键盘上的“搜索”按钮时触发。App、H51.6.0
onNavigationBarSearchInputClicked监听原生标题栏搜索输入框点击事件App、H51.6.0
注意:

onReachBottom使用注意 可在pages.json里定义具体页面底部的触发距离onReachBottomDistance,比如设为50,那么滚动页面到距离底部50px时,就会触发onReachBottom事件。

如使用scroll-view导致页面没有滚动,则触底事件不会被触发。scroll-view滚动到底部的事件请参考scroll-view的文档

onPageScroll (监听滚动、滚动监听、滚动事件)参数说明:

属性类型说明
scrollTopNumber页面在垂直方向已滚动的距离(单位px)

注意2:

  • onPageScroll里不要写交互复杂的js,比如频繁修改页面。因为这个生命周期是在渲染层触发的,在非h5端,js是在逻辑层执行的,两层之间通信是有损耗的。如果在滚动过程中,频发触发两层之间的数据交换,可能会造成卡顿。
  • 如果想实现滚动时标题栏透明渐变,在App和H5下,可在pages.json中配置titleNView下的type为transparent,参考
  • 如果需要滚动吸顶固定某些元素,推荐使用css的粘性布局,参考插件市场。插件市场也有其他js实现的吸顶插件,但性能不佳,需要时可自行搜索。
  • 在App、微信小程序、H5中,也可以使用wxs监听滚动,参考;在app-nvue中,可以使用bindingx监听滚动,参考

结语:这些只是我在学习过程中记录下的一点结构性知识,可能不够全面。其他方面也会开始整理,对于这些工具软件使用,语言的理解会逐渐加强。2020年逆战学习中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值