uni-app x 跨平台开发框架

目录

uni-app x 是什么

和Flutter对比

uts语言

uvue渲染引擎

组合式API的写法

选项式API写法

页面生命周期

API 

pages.json全局配置文件

总结


uni-app x 是什么

uni-app x,是下一代 uni-app,是一个跨平台应用开发引擎。

uni-app x 是一个庞大的工程,它包括uts语言、uvue渲染引擎、uni的组件和API、以及扩展机制。

uts是一门类ts的、跨平台的、新语言。uts在iOS端编译为swift、在Android端编译为kotlin、在Web端编译为js。

在Android平台,uni-app x 的工程被编译为kotlin代码,本质上是换了vue写法的原生kotlin应用,在性能上与原生kotlin一致。

uni-app x不支持vue2

uts替代的是js,而uvue替代的就是html和css。或者如果你了解flutter的话,也可以理解为uts类似dart,而uvue类似flutter。

和Flutter对比

在过去的跨平台方案中,逻辑层和ui层的通信始终是痛点。

  • 所以在webview渲染时,增加了renderjs、wxs等技术
  • 所以在nvue渲染时,增加了bindingX技术
  • 所以在skyline渲染时,增加了worklet技术

但这些补丁技术都不治根。过去只有flutter解决了dart和ui层的通信问题。可是这套方案又带来2个问题:

  1. dart和原生层通信也还是有延时,对象传递需要序列化,造成性能问题;
  2. 自渲染而不是原生渲染,无可避免会引发混合渲染,比如原生的信息流广告内嵌、原生输入法适配,造成内存高和输入障碍。

其实不管是js还是dart,和原生都有通信桥,功能上没有限制,可以调用各种原生能力,但问题就出在Android上这个通信性能上不去。

既然通信性能不行,那就干脆不通信。

由于uts在Android上被编译为kotlin,它的逻辑层和UI层都是纯原生的,没有通信问题,所以它的性能真正达到了原生水平。因为本质上它就是换了vue写法的原生kotlin应用。

在iOS上,情况要复杂些,这里就不具体讲解,如果有兴趣的小伙伴可以点击这里查看

 

uts语言

uts替代的是js,而uvue替代的就是html和css。或者如果你了解flutter的话,也可以理解为uts类似dart,而uvue类似flutter。

uvue是一套基于uts的、兼容vue语法的、跨平台的、原生渲染引擎。

  • Android版于3.99上线
  • Web版于4.0上线
  • iOS版于4.11上线

uts和ts很相似,但为了跨端,uts进行了一些约束和特定平台的增补。详见 uts语言介绍

例子如下:

// 声明一个string类型的变量
let str :string = "hello"; 
let str1 = 'world';
str = "hello world";
str = str1 as string; // 在不确定类型的时候可以给他一个类型// 声明一个传参是数字类型的,返回是boolean类型的函数
const test = (score: number): boolean => {return (score>=60)
}// 也可以自定义数据类型进行类型规范,比如声明一个Page类型type Page = {name : stringenable ?: booleanurl ?: string.PageURIString}// 总的来说,会TypeScript的,这个是没问题的,两个很相像

 

uvue渲染引擎

uvue支持的是vue3语法,支持组合式API和选项式API。详见vue语法

uvue在App端支持的css语法,是web的子集,类似于但优于nvue的css。仅支持flex布局,但也足以布局出需要的界面。详见css语法

使用该css子集,可保证跨端。如果把uvue页面编译到web平台,则web的其他css也都可以使用。

代码例子:

组合式API的写法

<template><view class="container"><button @click="add">加</button>{{ count }}<button @click="reduce">减</button></view>
</template><script lang="uts" setup>//这里只能写utslet count = ref(1);// 加一const add = () => {count.value++;}// 减一const reduce = () => {count.value++;}</script><style>.container{margin: auto;display: flex;flex-direction: row;align-items: center;}
</style>

选项式API写法

<template><view class="container"><button @click="add">加</button>{{ count }}<button @click="reduce">减</button></view>
</template><script lang="uts">export default {data() {return {count : 1,}},onLoad() {// 页面启动的生命周期,这里编写页面加载时的逻辑console.log('onLoad')},methods: {add : function () {this.count++;},reduce : function () {this.count--;},}}
</script><style>.container{margin: auto;display: flex;flex-direction: row;align-items: center;}
</style>

 

页面生命周期

<template><scroll-view :bounces="false"><view v-for="item in 90">{{ item }}</view></scroll-view>
</template><script setup lang="uts">onLoad((options : OnLoadOptions) => {console.log('onLoad', options)})onPageShow(() => {console.log('onPageShow');})onReady(() => {console.log('onReady');})onPullDownRefresh(() => {console.log('onPullDownRefresh');})onPageScroll((e : OnPageScrollOptions) => {console.log('onPageScroll');})onReachBottom(() => {console.log('onReachBottom');})onBackPress((options : OnBackPressOptions) : boolean | null => {console.log('onBackPress');return null})onPageHide(() => {console.log('onPageHide');})onUnload(() => {console.log('onUnload');})onResize((options : OnResizeOptions) => {console.log('onResize', options)})
</script><style>.container {height: 1200px;}
</style>

 

API 

uni-app x支持的API包括:

  1. uts的API 详见
  2. 全局API,前面不需要加uni.。如getApp、getCurrentPages
  3. uni.xxx的内置API。数量较多,详见
  4. uniCloud.xxx的内置API。详见
  5. dom的API 详见
  6. 原生API

由于 uts 可以直接调用 Android 和 iOS 的 api,所以 OS 和三方sdk的能力都可以在uts中调用。如下:

<script>import Build from 'android.os.Build';export default {onLoad() {console.log(Build.MODEL); //调用原生对象,返回手机型号console.log(uni.getSystemInfoSync().deviceModel); //调用uni API,返回手机型号。与上一行返回值相同}}
</script>

 

pages.json全局配置文件

pages.json 文件是 uni-app x 的页面管理配置文件,决定应用的首页、页面文件的路径、窗口样式、原生的导航栏、底部的原生tabbar 等。

所有页面,均需在pages.json中注册,否则不会被打包到应用中。

在HBuilderX中新建页面,默认会在pages.json中自动注册。在HBuilderX中删除页面文件,也会在状态栏提示从pages.json中移除注册。

除了管理页面,pages.json支持对页面进行特殊配置,比如应用首页的tabbar、每个页面的顶部导航栏设置。

但这些uni-app中设计的功能,主要是为了解决页面由webview渲染带来的性能问题,由原生提供一些配置来优化。

uni-app x的app平台,页面不再由webview渲染,其实不需要原生提供特殊配置来优化。但为了开发的便利和多端的统一,也支持了tabbar和导航栏设置。
但不再支持uni-app的app-plus专用配置以及tabbar的midbutton。

如pages.json中配置的导航栏和tabbar功能无法满足你的需求,可以不在pages.json中配置,自己用view做导航栏和tabbar。

例子如下

{"pages": [//pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages{"path": "pages/tabBar/component","style": {"navigationBarTitleText": "内置组件","backgroundColor": "#F8F8F8"}},],"globalStyle": {"pageOrientation": "portrait","navigationBarTitleText": "Hello uniapp x","navigationBarTextStyle": "white","navigationBarBackgroundColor": "#007AFF","backgroundColorContent": "#efeff4","backgroundColor": "#efeff4","backgroundColorTop": "#F4F5F6","backgroundColorBottom": "#F4F5F6"},"tabBar": {"color": "#7A7E83","selectedColor": "#007AFF","borderStyle": "black","backgroundColor": "#F8F8F8","list": [{"pagePath": "pages/tabBar/component","iconPath": "static/component.png","selectedIconPath": "static/componentHL.png","text": "内置组件"},{"pagePath": "pages/tabBar/API","iconPath": "static/api.png","selectedIconPath": "static/apiHL.png","text": "接口"},]},"condition": {//模式配置,仅开发期间生效"current": 0, //当前激活的模式(list 的索引项)"list": [{"name": "", //模式名称"path": "", //启动页面,必选"query": "" //启动参数,在页面的onLoad函数里面得到}]}
}

总结

个人看一遍下来感觉只要会uniapp、vue、TypeScript,可以直接上手直接做,如果有什么不同可以去看官方文档,包看懂的~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/41697.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ETAS工具导入Com Arxml修改步骤

文章目录 前言Confgen之前的更改Confgen之后的修改CANCanIfComComMEcuM修改CanNmCanSMDCMCanTp生成RTE过程报错修改DEXT-诊断文件修改Extract问题总结前言 通讯协议栈开发一般通过导入DBC实现,ETAS工具本身导入DBC也是生成arxml后执行cfggen,本文介绍直接导入客户提供的arxml…

动态颤抖的眼睛效果404页面源码

动态颤抖的眼睛效果404页面源码&#xff0c; 源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 动态颤抖的眼睛效果404页面源码

springboot+vue+mybatis图书馆借阅管理系统+PPT+论文+讲解+售后

21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存储达到…

AI大模型时代的存储发展趋势

从2022年下半年&#xff0c;大模型和AIGC这两个词变得极其火热&#xff0c;而GPU的市场也是一卡难求。对于这种迷乱和火热&#xff0c;让我想起了当年的比特币挖矿和IPFS。似乎世界一年一个新风口&#xff0c;比特币、元宇宙、NFT、AIGC&#xff0c;金钱永不眠&#xff0c;IT炒…

IIS数字功放MAX98357开发板/评估系统

前言 MAX98357中文介绍请访问下行链接 MAX98357、MAX98357A、MAX98357B小巧、低成本、PCM D类IIS放大器&#xff0c;具有AB类性能中文说明规格书 一般描述 MAX98357 开发板&#xff08;DEV 板&#xff09;是一个完全组装并经过测试的 PCB&#xff0c;用于评估 MAX98357 I2S …

C++怎么解决不支持字符串枚举?

首先&#xff0c;有两种方法&#xff1a;使用命名空间和字符串常量与使用 enum class 和辅助函数。 表格直观展示 特性使用命名空间和字符串常量使用 enum class 和辅助函数类型安全性低 - 编译器无法检查字符串有效性&#xff0c;运行时发现错误高 - 编译期类型检查&#xf…

2024 年 6 月区块链游戏研报:Pixels 引发 DAU 波动,行业用户留存率差异显著

作者&#xff1a;Stella L (stellafootprint.network) 数据来源&#xff1a;区块链游戏研究页面 2024 年 6 月&#xff0c;加密货币市场遭遇显著回调&#xff0c;比特币跌幅达 7.3%&#xff0c;以太坊更是下跌了 9.8%。此番波动不可避免地波及区块链游戏领域&#xff0c;导致…

Hudi 写入流程(图)

前言 主要为之前总结的源码文章补充流程图。总结一下整体流程说明 之前以Java Client为例,总结了 Insert 源码的整体流程及部分源码,由于各种原因,没有总结完。长时间不看这方面的源码,容易忘记,之前没有总结流程图,现在回忆起来比较麻烦,不如看流程图方便快捷。所以先补…

2024亚太杯中文赛B题洪水灾害的数据分析与预测原创论文分享

大家好&#xff0c;从昨天肝到现在&#xff0c;终于完成了2024年第十四届 APMCM 亚太地区大学生数学建模竞赛B题洪水灾害的数据分析与预测的完整论文啦。 实在精力有限&#xff0c;具体的讲解大家可以去讲解视频&#xff1a; 2024亚太杯中文赛B题洪水灾害预测原创论文保姆级教…

2024/7/6 英语每日一段

More than half of late-teens are specifically calling for more youth work that offers “fun”, with older teenagers particularly hankering for more jollity, according to a study carried out by the National Youth Agency. One in 10 said they have zero option…

量化机器人:金融市场的智能助手

引言 想象一下&#xff0c;在繁忙的金融市场中&#xff0c;有一位不知疲倦、冷静客观的“超级交易员”&#xff0c;它能够迅速分析海量数据&#xff0c;精准捕捉交易机会&#xff0c;并自动完成买卖操作。这位“超级交易员”不是人类&#xff0c;而是我们今天要聊的主角——量…

Vue 3 中集成 ECharts(附一些案例)

Vue 3 中集成 ECharts 的完全指南 引言 在现代Web开发中&#xff0c;Vue 3以其卓越的性能和灵活的Composition API赢得了广泛的关注。而ECharts&#xff0c;作为开源的一个使用JavaScript实现的强大可视化库&#xff0c;以其丰富的图表类型和高度可定制性成为了数据可视化的首…

计算机的错误计算(二十二)

摘要 计算机的错误计算&#xff08;十九&#xff09;展示了计算机的一个错误计算&#xff1a;本应该为 0的算式的结果不为0. 那么&#xff0c;增加计算精度&#xff0c;能确定是0吗&#xff1f;不一定。 计算机的错误计算&#xff08;十九&#xff09;展示了计算机对 的错误计…

适用于 Windows的 5 个最佳 PDF 转 Word 转换器

PDF 文件是共享文档的首选格式&#xff0c;但是&#xff0c;此类文件存在限制&#xff0c;使其难以修改或编辑。因此&#xff0c;您可能会发现自己正在寻找一种将 PDF 文件转换为 Word 或其他可编辑格式的方法。 有许多不同的 PDF 转换器&#xff0c;每个转换器的功能略有不同…

vue require引入静态文件报错

如果是通过向后端发送请求&#xff0c;动态的获取对应的文件数据流很容易做到文件的显示和加载。现在研究&#xff0c;一些不存放在后端而直接存放在vue前端项目中的静态媒体文件如何加载。 通常情况下&#xff0c;vue项目的图片jpg&#xff0c;png等都可以直接在/ass…

招聘一个1-3年经验的Java工程师:企业视角的技能与素质要求

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

Git错误分析

错误案例1&#xff1a; 原因&#xff1a;TortoiseGit多次安装导致&#xff0c;会记录首次安装路径&#xff0c;若安装路径改变&#xff0c;需要配置最后安装的路径。

Windows搭建本地对象存储服务MinIO并且使用springboot整合

开发文档&#xff1a; MinIO Windows中文文档 MinIO Object Storage for Windows &#xff08;英文文档&#xff09; 1、准备工作 准备一个空的文件夹&#xff0c;用来存放minio相关的内容&#xff1b; 这里是在D盘创建一个minio的文件夹&#xff1b; 后续所有跟MinIO相关…

matlab 超越椭圆函数图像绘制

matlab 超越椭圆函数图像绘制 超越椭圆函数图像绘制xy交叉项引入斜线负向斜线成分正向斜线成分 x^2 y^2 xy 1 &#xff08;负向&#xff09;绘制结果 x^2 y^2 - xy 1 &#xff08;正向&#xff09;绘制结果 超越椭圆函数图像绘制 xy交叉项引入斜线 相对于标准圆&#xf…

ESP32-Wifi问题解答

目录 前言 环境&#xff1a;arduino 芯片&#xff1a;ESP32 一、先上例程 1.大家打开官方例程 点击:示例->Wifi->WifiClient 2:Wifi配置 打开例程如图: 在1处设置WiFi名称 在2处设置WiFi密码 注意:双引号要留着 3:编译,烧录->问题发生了! 二、问题解决方法 1.…