[实践] uni-app 的使用总结

最近使用 uni-app 的感受。

使用体验

没用之前以为真和 Vue 一样,用了之后才知道。有点类似 Vue 和 小程序结合的感觉。写类似小程序的标签,有着小程序和 Vue 的生命周期钩子。对比 uni-app 文档和微信小程序的文档,不差多少,只是将 wx => uni,熟悉 Vue 和 小程序可以直接上手。

如果看过其他小程序的文档,可以发现,文档主要的三大章节就体现在框架组件API

uni-app 需要注意看注意事项,文档给出了和 Vue 使用的区别。例如动态的 Class 与 Style 绑定,在 H5 能用,APP 和小程序的体现就不一样。

配置项跟着文档来,开发环境也是现成的,下载 HBuilderX 导入项目就能运行,日常开发习惯了 VSCode,所以 HBuilderX 的主要作用就是用来打包 APK 和起各个端的服务,coding 的话当然还是用 VSCode。

路由

uni-app 的路由全部配置在 pages.json 文件里,就会导致多人开发的时候,路由无法拆分,如果处理的不好,就会发生冲突。

导航

导航栏需要注意的一个问题就是不同端的展示形式会不同,所以要处理兼容问题,导航栏可以自定义,用原生,框架,插件但是兼容性都不同,多端需求一定要在不同设备跑一下看效果。

例如在小程序和 APP 中,原生导航栏取消不了,就不能用自定义的导航栏,要在 pages.json 中配置原生导航栏。

兼容方法就是用 uni-app 提供的条件编译,处理各端不同的差异,我们支付的业务逻辑也是通过条件编译,区分不同端调用不同的支付方式。

生命周期

分为 应用的生命周期页面的生命周期组件的生命周期。写过小程序和 Vue 的很好理解,大致上和 Vue 的还是差不多的,页面生命周期针对当前的页面,应用生命周期针对小程序、APP。这些过程可能都要踩一下!

网络请求和环境配置

官方的 uni.request 虽然封装好了基本的请求,但是没有拦截,我们开始也是自己在这基础上加了层壳,简单的封装发送请求。当然也可以选择第三方库的使用,如 flyio、axios。

我们是前端自己封装了 HTTP 请求,并且统一接口的请求方式,所有的接口放到 api.js 文件中进行统一管理。这样大家在页面请求接口的时候风格才统一,包括约定好请求拦截和响应拦截,具体拦截的参数和后台约定好。

资源优化

  • 暂时接触不到 Webpack 之类的资源打包优化,但是文档中有提到资源预取、预加载、treeShaking 只需要在配置文件中设置即可,或者在开发工具勾上。小程序也是勾选自动压缩混淆。
  • 删除没用到文件和图片资源,因为打包的时候是会算进去的,比如 static 目录下的资源文件都会被打包,而且图片资源太大也不好。
  • uni-app 运行时的框架主库 chunk-vendors.js 文件是经过处理的,部署做 gzip

Web-View 组件

在 uni-app 中使用 Web-View,可以使用本地的资源和网络的资源,不同平台也是有差异的,小程序不支持本地 HTML,且小程序端 Web-View 组件一定有原生导航栏。

需要注意的是网页向应用 postMessage 的时候需要引入 uni.web-view.js,不然是没办法通信拿不到数据。

TODO: 这个坑后面再详细总结下!

全局状态

最开始是直接使用类似小程序的 globalData 来管理我们的全局状态,但是后面发现需求一多,加了各种东西之后,需要取这个状态的时候就很痛苦,做为程序猿嘛,都想偷懒吖,每次都得引入一下 getApp().globalData.data 这样很繁琐可不行,就替换成了 Vuex,需要取这个变量的时候,直接 this.vuex_xxxx 就能拿到这个值。

有段时间重写了 HTTP 请求部分和全局状态管理部分。

小程序中要在每一个页面中添加使用共有的数据,可以有三种方式解决。

Vue.prototype

它的作用是可以挂载到 Vue 的所有实例上,供所有的页面使用。

// main.js
Vue.prototype.$globalVar = "Hello";

然后在 pages/index/index 中使用:

<template><view>{{ useGlobalVar }}</view>
</tempalte>
<script>
export default {data (){return {useGlobalVar: $globalVar}}
}
</script>

globalData

<!-- App.vue -->
<script>export default {globalData:{data:1}onShow() {getApp().globalData.data; // 使用getApp().globalData.data = 1; // 更新};
</script>

Vuex

Vuex 是 Vue 专用的状态管理模式。能够集中管理其数据,并且可观测其数据变化,以及流动。

之前看到一个通俗化比喻:用交通工具来比喻项目中这几种描述全局变量的方式。

下面列举这些方式通俗的理解状态:

Vue 插件 vue-bus 可以来管理一部分全局变量(叫应用状态吧),学习后发现,bus(中文意思:公交车)这名字取得挺形象的。

先罗列一下这些方式,不过这种分类并不严谨。

1、VueBus:公交车 2、Vuex:飞机 3、全局 import

  • a.new Vue():专车;
  • b.Vue.use:快车;
  • c.Vue.prototype:顺风车。

4、globalData:地铁

首先 VueBus,像公交车一样灵活便捷,随时都可以乘坐;表现在代码里,很轻便,召之即来,缺点就是不好维护,没有一个专门的文件去管理这些变量。想象平时等公交车的心情,知道它回来,但不知道它什么时候来,给人一种很不安的感觉。

Vuex,它像飞机,很庄重,塔台要协调飞机运作畅顺,飞机随时向地面报告自己的位置,适合用在大型项目。表现代码中,就是集中式管理所有状态,并且以可预测的方式发生变化。也对应着飞机绝对不能失联的特点。

第三种方式是全局 import,分三种类型,分别是:new Vue()Vue.use()Vue.prototype。可以用网约车来比喻,三种类型分别对应:专车、快车、顺风车。都足够灵活,表现在代码里:一处导入,处处可用。

再分别说明:

new Vue() 就像滴滴的礼橙专车,官方运营,安全可靠。表现在代码里,就是只有 Vue 官方维护的库才能使用这种方式。

Vue.use() 就像快车,必须符合滴滴的规范,才能成为专职司机。表现在代码中,就是导入的插件(或者库)必须符合 Vue 的写法(即封装了 Vue 插件写法)。

Vue.prototype 像顺风车,要求没上面两个那么严,符合一般 js 写法就行,就像顺风车的准入门槛稍稍低一点。

当然,uni-app 的项目里还有可以用 globalData 定义全局变量,非要比喻,可以用地铁,首先比 vue-bus 更好管理维护,想象地铁是不是比公交更可靠;其次比 Vuex 更简单,因为 globalData 真的就是简单的定义一些变量。

globalData 是微信小程序发明的,Vue 项目好像没有对应的概念,但是在 uni-app 中一样可用。

上面说到,这种分类方式不严谨,主要体现在原理上,并不是简单的并列关系或包含关系。

插件市场

uni-app 的主要特色也源自于它的插件市场十分丰富。

用得比较好的组件:

uView:我们用了这个库的骨架屏。这个库还是有很多技巧可以学到的。

https://www.uviewui.com/js/intro.html

ColorUI-UniApp:是个样式库,不是组件库。

https://ext.dcloud.net.cn/plugin?id=239

答题模版:左右滑答题模版,单选题、多选项,判断题,填空题,问答题。基于 ColorUI 做的。

https://ext.dcloud.net.cn/plugin?id=451

uCharts 高性能跨全端图表:

https://ext.dcloud.net.cn/plugin?id=271

最后:各端的差异性,很多东西,H5 挺好的,上真机就挂了,真机好着的,换小程序就飘了,不同小程序之间也有差异,重点是仔细阅读文档。

云打包限制,云打包(打 APK) 的每天做了限制,超出次数需要购买。

虽然可能一些原生可以实现的功能 uni-app 实现不了,不过整体开发下来还行,很多的坑还是因为多端不兼容,除了写起来麻烦一点,基本上都还是有可以解决的策略。比之前用 Weex 写 APP 开发体验好一点,比 React Native 的编译鸡肋一点(这点体验不是很好),至于 Flutter 还没有试过,有机会的话会试一下。

uni app 调用网络打印机_uni-app 的使用体验总结相关推荐

  1. app调用另一个app的方法

    APP调用APP在编程应用中很常见,浏览了许多大神的文章,颇有心得.谢谢前辈们的总结.下面总结给自己: 主要的套路是:intent =packageManager.getLaunchIntentFor ...

  2. uni app 调用网络打印机_前端工程师 | 原生小程序坑点:uni-app到底好用在哪里?...

    要想知道uni-app开发好用在哪里,我们先看看uni-app的官网,下图 系统的介绍.框架.组件.api的使用都非常的详细,感兴趣的朋友可以去尝试尝试. 我们进图正题,首先和原生小程序来比较,其次和 ...

  3. uni app 调用网络打印机_一套代码,七端运行-uni-app

    为什么要使用uni-app uni-app 是一个使用 Vue.js 开发跨平台应用的前端框架,开发者编写一套代码,可编译到iOS.Android.H5.小程序等多个平台. 同时在别的方面它也有很大优 ...

  4. uni app 调用网络打印机_uni-app封装一个request请求

    在上一篇文章里面,写到使用uni.request请求的方法https://www.jianshu.com/p/bc62c9e1beed getList() { uni.request({url: &q ...

  5. ios调用第三方程序打开文件,以及第三方调用自己的APP打开文件

    一.自己的APP调用第三方打开文件 主要是使用 UIDocumentInteractionController 类 并实现 UIDocumentInteractionControllerDelegat ...

  6. App调用safar

    /调用safar打开网页 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.cnblo ...

  7. 如何修改app服务器数据库连接,app调用服务器数据库连接

    app调用服务器数据库连接 内容精选 换一换 GaussDB(for Influx)提供使用内网.公网.负载均衡和程序代码的连接方式. GaussDB(for MySQL)全兼容MySQL协议,因此, ...

  8. vue js 和原生app调用回调方法问题

    vue js 和原生app调用回调方法问题 import Vue from 'vue' export default { name: 'list', components: { }, data: () ...

  9. android app调用第三方地图路线规划导航(百度,高德,腾讯)

    android app调用第三方地图路线规划导航(百度,高德,腾讯) 因为直接使用高德的sdk提供的导航被投诉说不准,所以需要接第三方. 把BAT系的地图都接上了,有兄弟找到其他的地图调用方法告诉下小 ...

最新文章

  1. 4.3.6 无分类编址CIDR
  2. linux下安装jdk+tomcat+eclipse+mysql
  3. Django 使用celery任务队列的配置
  4. java进入编程界面_java – 编程到界面是什么意思?
  5. python pyusb库使用教程【在window10系统上操作USB】(操作Intel Realsense D435)
  6. html中加盒子,在HTML中各类型盒子的基线应如何确定
  7. 前端工程师后端转型实录
  8. rmi full gc问题_RMI强制Full GC每小时运行一次
  9. 信息安全工程师笔记-网络安全风险评估技术原理与应用
  10. 你的个人信息真的被偷走了?——那些过分“精准”的广告推荐的背后
  11. 断点续传、秒传究竟是如何实现的?
  12. 第一次Spring总结
  13. 最新最全 VSCODE 插件推荐(2022版)
  14. python编程从入门到实践练习15-3:分子运动
  15. ZUI + SSM框架下数据表格的使用
  16. 09.7. 序列到序列学习(seq2seq)
  17. java中bio_java中bio是什么
  18. 计算机应用基础第三版练习题答案,计算机应用基础练习题答案
  19. SQL语句--CASE函数写法的简单举例,及应用
  20. 把圆形放入矩形的Packing问题

热门文章

  1. MongoDB文件操作(支持大于4M数据)
  2. win7 64 安装sp1补丁提示“客户端没有所需的特权”
  3. 1040. 有几个PAT(25
  4. php jquery模板替换图片,仿jquery插件官网头像更换(原创)
  5. python安装依赖失败_python执行安装第三方依赖numpy失败:error: Unable to find vcvarsall.bat...
  6. 【Linux进程、线程、任务调度】一 Linux进程生命周期 僵尸进程的含义 停止状态与作业控制 内存泄漏的真实含义 task_struct以及task_struct之间的关系
  7. 【常见笔试面试算法题12续集二】动态规划算法案例2矩阵最小路径和练习题
  8. python二进制、字符编码及文件操作
  9. Python——assert(断言函数)
  10. .NET面试题解析(04)-类型、方法与继承