uniapp基礎 (一)

目錄

UniApp 是什么?有什么優勢

跨平臺高效開發

Vue.js 技術生態

?插件生態豐富

漸進式開發支持

UniApp 跨平臺兼容的實現原理

編譯時轉

運行時適配層

?條件編譯

性能優化策略

1.預編譯模

2.原生組件混合渲

3.分包加載

UniApp 的生命周期鉤子有哪些?

應用生命周期鉤子

頁面生命周期鉤子

組件生命周期鉤子

注意事項

UniApp 與原生小程序生命周期的區別

生命周期鉤子名稱不同

生命周期調用順序不同

組件生命周期支持不同

全局生命周期擴展

兼容性差異

UniApp 的頁面路由?如何實現頁面跳轉?

路由配置

路由跳轉方法

1.navigateTo

2.redirectTo

3.reLaunch

4.switchTab

5.navigateBack

?預加載頁面(preloadPage)

路由傳參

路由攔截

動態路由

注意事項

UniApp 支持哪些小程序平臺

UniApp 全局樣式/局部樣式?

全局樣式

局部樣式

樣式優先級與注意事項

pages.json 核心字段


UniApp 是什么?有什么優勢

UniApp 是一個使用 Vue.js 開發跨平臺應用的框架。

跨平臺高效開發

  • 采用 "一次編寫,多端發布" 模式,顯著降低開發成本
  • 支持 14+ 平臺編譯,覆蓋主流移動端、Web 端及小程序生態
  • 開發效率提升約 300%(相較原生多端獨立開發)

Vue.js 技術生態

  • 完全兼容 Vue.js 語法,前端開發者零門檻上手
  • 支持 Vuex 狀態管理、Vue Router 路由等核心能力
<template><view class="container"><text>{{ message }}</text></view>
</template>
<script>
export default {data() {return { message: "Hello UniApp!" }}
}
</script>

?插件生態豐富

  • 官方插件市場提供 2000+ 即用組件
  • 支持第三方 SDK 便捷集成(如支付、推送、統計)
  • 示例:一鍵集成微信登錄功能
uni.login({provider: 'weixin',success: res => console.log(res.code)
})

漸進式開發支持

  • 支持混合開發模式:可嵌入原生頁面或與原生代碼互調
  • 提供條件編譯指令實現平臺差異化
// #ifdef H5
console.log("當前運行在Web環境");
// #endif

UniApp 跨平臺兼容的實現原理

編譯時轉

UniApp 使用 Vue.js 作為開發語法,在編譯階段通過條件編譯和代碼轉換技術,將 Vue 代碼轉換為目標平臺(如微信小程序、H5、iOS、Android 等)的原生代碼。?

運行時適配層

UniApp 在運行時通過統一的 JavaScript 核心引擎(如 V8 或 JavaScriptCore)執行邏輯代碼,同時提供一套跨平臺的 API 抽象層。這些 API 在調用時動態映射到不同平臺的原生 API 上,例如 uni.request 在微信小程序中會轉換為 wx.request,在 H5 中則使用 XMLHttpRequestfetch。?

?條件編譯

// 條件編譯示例
#ifdef MP-WEIXIN
console.log('這是微信小程序環境');
#endif

性能優化策略

1.預編譯模

在非 H5 平臺(如小程序),模板會在編譯時預先轉換為目標平臺的模板語言,減少運行時的解析開銷。?

2.原生組件混合渲

對于高性能需求場景(如地圖、視頻),UniApp 允許直接調用平臺原生組件,與框架組件混合渲染。?

3.分包加載

支持將應用拆分為多個子包,按需加載以提升啟動速度,尤其在微信小程序等對包大小有限制的平臺中。?

UniApp 的生命周期鉤子有哪些?

UniApp 的生命周期鉤子分為應用生命周期頁面生命周期組件生命周期三部分

應用生命周期鉤子

應用生命周期鉤子在 App.vue 中定義,用于監聽整個應用的全局狀態。

  • onLaunch:應用初始化時觸發,全局只觸發一次。
  • onShow:應用啟動或從后臺進入前臺時觸發。
  • onHide:應用從前臺進入后臺時觸發。
  • onError:應用發生腳本錯誤或 API 調用失敗時觸發。
  • onUnhandledRejection:應用未處理的 Promise 拒絕事件觸發。
// App.vue 示例
export default {onLaunch(options) {console.log('應用初始化', options);},onShow(options) {console.log('應用顯示', options);},onHide() {console.log('應用隱藏');}
}

頁面生命周期鉤子

頁面生命周期鉤子在頁面(.vue 文件)中定義,用于監聽頁面的加載、顯示、隱藏等狀態。

  • onLoad:頁面加載時觸發,接收頁面參數。
  • onShow:頁面顯示時觸發。
  • onReady:頁面初次渲染完成時觸發。
  • onHide:頁面隱藏時觸發。
  • onUnload:頁面卸載時觸發。
  • onPullDownRefresh:頁面下拉刷新時觸發。
  • onReachBottom:頁面上拉觸底時觸發。
  • onShareAppMessage:點擊右上角分享時觸發。
  • onPageScroll:頁面滾動時觸發。
  • onResize:頁面尺寸變化時觸發(如橫豎屏切換)。
// 頁面示例
export default {onLoad(options) {console.log('頁面加載', options);},onShow() {console.log('頁面顯示');},onReady() {console.log('頁面渲染完成');}
}

組件生命周期鉤子

組件生命周期鉤子在自定義組件中定義,與 Vue 的生命周期類似,但增加了 UniApp 特有的鉤子。

  • beforeCreate:組件實例初始化之前觸發。
  • created:組件實例創建完成時觸發。
  • beforeMount:組件掛載到 DOM 前觸發。
  • mounted:組件掛載到 DOM 后觸發。
  • beforeUpdate:組件數據更新前觸發。
  • updated:組件數據更新后觸發。
  • beforeDestroy:組件銷毀前觸發。
  • destroyed:組件銷毀后觸發。
  • onBackPress:頁面返回按鈕按下時觸發(僅 H5 和 App 支持)。
// 組件示例
export default {created() {console.log('組件創建完成');},mounted() {console.log('組件掛載完成');},onBackPress() {console.log('返回按鈕按下');}
}

注意事項

  1. 應用生命周期App.vue 可用,pages 和組件中無效。
  2. 頁面生命周期僅在頁面中可用,組件中無效。
  3. 組件生命周期與 Vue 保持一致,但需注意平臺差異(如 onBackPress 僅部分平臺支持)。
  4. 部分鉤子(如 onPullDownRefresh)需在 pages.json 中配置啟用。

UniApp 與原生小程序生命周期的區別

生命周期鉤子名稱不同

  • 原生小程序的頁面生命周期鉤子以 on 開頭,例如 onLoadonShow
  • UniApp 的生命周期鉤子名稱與 Vue 類似,例如 createdmounted,同時兼容小程序的鉤子。

生命周期調用順序不同

  • UniApp:在頁面加載時,會先觸發 Vue 的生命周期(如 createdmounted),再觸發小程序的頁面生命周期(如 onLoadonShow)。
  • 原生小程序:僅觸發自身的頁面生命周期鉤子(如 onLoadonShow),沒有 Vue 的生命周期。

組件生命周期支持不同

  • UniApp:支持 Vue 的組件生命周期(如 createdmounted),適用于組件開發。
  • 原生小程序:組件使用 lifetimes 字段定義生命周期(如 attacheddetached),與頁面生命周期不同。

全局生命周期擴展

  • UniApp:支持應用級別的生命周期(如 onLaunchonShow),同時兼容 Vue 的全局邏輯。
  • 原生小程序:僅支持 App 中定義的生命周期(如 onLaunchonShow),無法直接使用 Vue 的全局邏輯。

兼容性差異

  • UniApp 的生命周期設計是為了兼容多端(H5、小程序、App),因此部分鉤子在特定平臺可能不生效。
  • 原生小程序的生命周期僅針對微信小程序,不存在跨平臺兼容問題。

UniApp 的頁面路由?如何實現頁面跳轉?

路由配置

UniApp 的路由配置在 pages.json 文件中完成。每個頁面需要在此文件中注冊,否則無法跳轉。配置示例:

{"pages": [{"path": "pages/index/index","style": {"navigationBarTitleText": "首頁"}},{"path": "pages/detail/detail","style": {"navigationBarTitleText": "詳情頁"}}]
}

路由跳轉方法

1.navigateTo

navigateTo 保留當前頁面,跳轉到新頁面:

uni.navigateTo({url: '/pages/detail/detail?id=1'
});

?參數通過 URL 傳遞,目標頁面在 onLoad 生命周期中接收:

onLoad(options) {console.log(options.id); // 輸出 1
}
2.redirectTo

redirectTo 關閉當前頁面,跳轉到新頁面:

uni.redirectTo({url: '/pages/detail/detail?id=1'
});
3.reLaunch

reLaunch 關閉所有頁面,打開新頁面:

uni.reLaunch({url: '/pages/index/index'
});
4.switchTab

switchTab 跳轉到 TabBar 頁面:

uni.switchTab({url: '/pages/tabbar/tabbar'
});
5.navigateBack

navigateBack 返回上一頁或多頁:

uni.navigateBack({delta: 1 // 返回層數
});

?預加載頁面(preloadPage)

提前加載目標頁面資源,提升用戶體驗:

uni.preloadPage({url: '/pages/detail/detail'
});

路由傳參

跳轉時可以傳遞參數,目標頁面通過 onLoad 生命周期接收:

// 跳轉時傳遞參數
uni.navigateTo({url: '/pages/detail/detail?id=1&name=test'
});// 目標頁面接收參數
onLoad(options) {console.log(options.id); // 輸出 1console.log(options.name); // 輸出 test
}

路由攔截

可以通過全局前置守衛 beforeEach 實現路由攔截:

// main.js 中設置
uni.addInterceptor('navigateTo', {invoke(args) {if (!hasLogin()) {uni.redirectTo({url: '/pages/login/login'});return false;}return true;}
});

動態路由

UniApp 支持動態路由,通過 : 定義參數:

{"path": "pages/detail/:id"
}

跳轉時傳遞動態參數:

uni.navigateTo({url: '/pages/detail/1'
});

目標頁面通過 this.$route.params 獲取參數:

onLoad() {console.log(this.$route.params.id); // 輸出 1
}

注意事項

  • 跳轉 TabBar 頁面必須使用 switchTab
  • 跳轉路徑需以 / 開頭,對應 pages.json 中的配置。
  • navigateTo 不能跳轉到 TabBar 頁面。
  • 路由傳參長度有限制,建議傳遞必要參數。
  • 動態路由需要確保路徑匹配,否則可能無法跳轉。

UniApp 支持哪些小程序平臺

manifest.json 中配置平臺

{"mp-weixin": {"appid": "微信AppID"}
}

UniApp 是一個跨平臺開發框架,支持編譯到多個小程序平臺。以下是目前主流支持的平臺:

  1. 微信小程序
  2. 支付寶小程序
  3. 百度智能小程序
  4. 字節跳動小程序(抖音、今日頭條等)
  5. QQ小程序
  6. 快手小程序
  7. 飛書小程序
  8. 釘釘小程序
  9. 京東小程序

使用 process.env.UNI_PLATFORM 判斷平臺,實現差異化邏輯。

UniApp 全局樣式/局部樣式?

全局樣式

全局樣式適用于整個項目,可通過 App.vue 文件或在 uni.scss 中定義。在 App.vue<style> 標簽中編寫的樣式默認全局生效,但需注意避免樣式污染。

uni.scss 中定義 SCSS 變量或混合器,其他文件通過 @import 引入即可使用。例如:

$primary-color: #007AFF;

項目根目錄的 common 文件夾可存放公共樣式文件(如 common.css),在需要的頁面通過 @import 引入。UniApp 默認會編譯所有頁面和組件的樣式,全局樣式無需手動引入。

局部樣式

局部樣式通過單文件組件(.vue 文件)的 <style> 標簽實現。添加 scoped 屬性可限制樣式僅作用于當前組件,例如:

<style scoped>
.button {background: $primary-color;
}
</style>

樣式優先級與注意事項

UniApp 中樣式優先級遵循 CSS 規則,但需注意:

  • 全局樣式可能被局部樣式覆蓋
  • !important 會提高樣式優先級
  • scoped 樣式通過添加屬性選擇器實現隔離

跨平臺樣式差異可通過條件編譯處理:

/* #ifdef H5 */
.h5-style { color: blue; }
/* #endif */

pages.json 核心字段

pages
必填字段,用于配置應用頁面路徑及窗口表現。每個頁面配置包含以下屬性:

  • path:頁面路徑,需在根目錄下創建對應文件(如 pages/index/index)。
  • style:頁面窗口樣式,可覆蓋全局配置,支持 navigationBarTitleText(標題)、navigationBarBackgroundColor(導航欄背景色)等。

globalStyle
全局默認窗口樣式,適用于所有頁面。常見字段包括:

  • navigationBarTextStyle:導航欄標題顏色(black/white)。
  • navigationBarTitleText:默認標題文字。
  • backgroundColor:窗口背景色。
  • enablePullDownRefresh:是否開啟下拉刷新(默認為 false)。

tabBar
配置底部或頂部選項卡欄,需包含以下子字段:

  • list:數組形式,每個選項卡需配置 pagePath(頁面路徑)、text(顯示文字)、iconPath(未選中圖標路徑)、selectedIconPath(選中圖標路徑)。
  • color:選項卡默認顏色。
  • selectedColor:選中時顏色。
  • backgroundColor:選項卡背景色。

condition
用于配置啟動模式的條件,僅開發環境生效。支持模擬路徑參數、啟動頁面等場景。

subPackages
分包加載配置,提升首屏加載速度。需指定 root(分包根目錄)和 pages(分包頁面路徑列表)。

preloadRule
配置預加載規則,通過 network(網絡條件)和 packages(預加載的分包)優化性能。

easycom
自動按需引入組件配置,簡化組件導入。默認規則為 "autoscan": true,支持自定義匹配規則。

usingComponents
手動配置自定義組件路徑,適用于非 easycom 模式的組件引入。

示例代碼片段

{"pages": [{"path": "pages/index/index","style": {"navigationBarTitleText": "首頁"}}],"globalStyle": {"navigationBarTextStyle": "black","backgroundColor": "#F8F8F8"},"tabBar": {"list": [{"pagePath": "pages/index/index","text": "首頁","iconPath": "static/icons/home.png","selectedIconPath": "static/icons/home-active.png"}]}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/92001.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/92001.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/92001.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【圖像算法 - 10】進階入門:改進 YOLO11 安全帽檢測的關鍵參數與場景適配

一、項目背景與需求 視頻全文介紹 【圖像算法 - 10】進階入門&#xff1a;改進 YOLO11 安全帽檢測的關鍵參數與場景適配今天我們使用深度學習來訓練一個安全帽檢測系統&#xff0c;基于YOLO11的安全帽檢測系統。我們使用了兩萬張圖片的數據集訓練了這次的基于YOLO11的安全帽檢…

【C 學習】04.1-類型轉換浮點數

“知道做不到就是不知道”一、類型轉換1.自動類型轉換&#xff1a;當運算符&#xff08;常見、-、*、/、%&#xff09;兩邊出現不一致的類型時&#xff0c;編譯器會自動轉換成較大的&#xff08;范圍更大&#xff09;類型。從小到大&#xff1a;char-short-int-long-long long;…

基于反事實對比學習的魯棒圖像表征|文獻速遞-醫學影像算法文獻分享

Title題目Robust image representations with counterfactual contrastive learning基于反事實對比學習的魯棒圖像表征01文獻速遞介紹醫學影像中的對比學習已成為利用未標記數據的有效策略。這種自監督學習方法已被證明能顯著提升模型跨領域偏移的泛化能力&#xff0c;并減少訓…

機器學習(5):樸素貝葉斯分類算法

貝葉斯的核心思想就是&#xff0c;誰的概率高就歸為哪一類。貝葉斯推論P(A):先驗概率。即在B事件發生之前&#xff0c;我們對A事件概率的一個判斷。P(A|B)&#xff1a;后驗概率。即在B事件發生之后&#xff0c;我們對A事件概率的重新評估。P(B|A)/P(B)&#xff1a;可能性函數。…

Docker 容器內進行 frp 內網穿透

開始之前需要有一臺可以進行公網訪問的服務器 下載安裝 frp 這個直接到 github 官網就可以下載了 點擊Releases 就可以查看到可以下載的源&#xff0c;根據自己電腦的型號進行選擇就好了。 linux服務器上下載 如果是在linux的服務器上的話可以直接通過wget進行下載 例如&a…

復制網頁文字到Word、WPS文字?選中后直接拖放

要把網頁、PDF或其他應用中的文字內容復制到Word、WPS文字、記事本等&#xff0c;不一定要先復制、再粘貼&#xff0c;也可以選中文字后直接拖動到目標位置即可。多次操作&#xff0c;可以把窗口并排再拖動。如果你經常需要在不同應用之間引用文字&#xff0c;不妨試一試。操作…

Starrocks中的 Query Profile以及explain analyze及trace命令中的區別

背景 本文基于Starrocks 3.5.5 現有公司因為業務的不同&#xff0c;可能會更加關系單個SQL 的RT&#xff0c;因為如果一個SQL的RT比較大的話&#xff0c;影響的就是這個業務&#xff0c;從而影響收入&#xff0c;所以對于這方面我們就比較關心&#xff0c; 而最近在基于Starro…

網絡 —— 筆記本(主機)、主機虛擬機(Windows、Ubuntu)、手機(筆記本熱點),三者進行相互ping通

背景介紹最近在筆記本電腦上的虛擬機(Ubuntu、Windows Server搭配)上部署了"WD"開源手游服務器(舊版本)&#xff0c;手機連接上了筆記本電腦開啟的WIFI熱點&#xff0c;同時手機上安裝了"WD"手游客戶端。于是首先得保證網絡相互暢通才能玩游戲&#xff0c;…

裸露土堆識別準確率↑32%:陌訊多模態融合算法在生態監測的實戰解析

原創聲明本文為原創技術解析文章&#xff0c;涉及技術參數及架構描述均參考《陌訊技術白皮書》&#xff0c;禁止任何形式的轉載與抄襲。一、行業痛點&#xff1a;裸露土堆識別的現實挑戰在生態環境保護、建筑工地監管等場景中&#xff0c;裸露土堆的精準識別是遏制揚塵污染、防…

網站從HTTP升級到HTTPS網址方法

將網站從HTTP升級到HTTPS涉及幾個關鍵步驟&#xff0c;以確保安全連接以及用戶和搜索引擎的平穩過渡。獲取并安裝SSL/TLS證書&#xff1a;1、從CA機構授權提供商Gworg獲取SSL/TLS證書。選項包括域名驗證(DV)、組織驗證(OV)和擴展驗證(EV)證書&#xff0c;驗證嚴格度各不相同&am…

WaitForSingleObject 函數參數影響及信號處理分析

一、第二個參數&#xff08;超時時間&#xff09;的影響 DWORD result WaitForSingleObject(hHandle, 1000);中的第二個參數1000表示等待超時時間為1000毫秒&#xff08;1秒&#xff09;&#xff0c;其核心影響如下&#xff1a; 1. 函數行為控制 立即返回&#xff1a;若對象已…

dbeaver導入數據及配置講解

導入數據教程&#xff1a; 前提.csv文件&#xff1a;且只能導入一個sheet點擊下一步選中導入的.csv文件對應好數據字段和表字段&#xff0c;感覺不需要導入的可以skip配置一下&#xff0c;下面有介紹&#xff1a;以下為你詳細解析這些數據加載相關功能的含義與作用&#xff1a;…

JAVA學習筆記 自增與自減的使用-006

目錄 1 基本概述 2 自增與自減的用法 2.1單獨使用 2.2 參與運算 3 思考與練習 3.1 基礎題 3.2 中等題 3.3 進階題 4 總結 源計劃&#xff1a;我從來不認為自己的成功過程有多心酸&#xff0c;只是心中不懼失敗&#xff0c;能夠承受別人不能接受的失望而已&#xff01;…

從LCM到SomeIP,再到DDS:技術演進與工作原理剖析

文章目錄一、LCM&#xff1a;輕量級通信與編組庫工作原理C 代碼示例局限性二、SomeIP&#xff1a;面向服務的可擴展中間件工作原理C 代碼示例優勢與特點三、DDS&#xff1a;數據分發服務工作原理C 代碼示例優勢與應用場景四、技術演進總結在分布式系統通信領域&#xff0c;技術…

Redis里面什么是sdshdr,可以詳細介紹一下嗎?

文章目錄為什么 Redis 不直接使用 C 語言的字符串&#xff1f;sdshdr 的結構sdshdr 的不同類型sdshdr 帶來的優勢總結我們來詳細解析一下 Redis 的核心數據結構之一&#xff1a; sdshdr。sdshdr 是 “Simple Dynamic String header” 的縮寫&#xff0c;意為“簡單動態字符串頭…

RocketMq如何保證消息的順序性

文章目錄1.順序消息的全流程1.1 發送階段&#xff1a;消息分區1.2.存儲階段&#xff1a;順序寫入1.3.消費階段&#xff1a;串行消費2.第三把鎖有什么用?3.順序消費存在的問題和Kafka只支持同一個Partition內消息的順序性一樣&#xff0c;RocketMQ中也提供了基于隊列(分區)的順…

zabbix平臺無法刪除已停用主機的處理案例

在zabbix平臺上刪除已停用的主機&#xff0c;提示“SQL描述式執行已失敗: "DELETE FROM items WHERE (itemid IN &#xff08;.....)”&#xff0c;無法刪除&#xff0c;本文為處理情況。一、問題現象在zabbix平臺上刪除已停用的主機&#xff0c;提示“SQL描述式執行已失敗…

【計算機網絡】6應用層

1.網絡應用模型 特性 客戶/服務器模型(Client-Server, C/S) 對等模型(Peer-to-Peer, P2P) 中心化 是(依賴服務器) 否(去中心化) 角色特點 服務器 客戶機 無中心服務器 提供計算服務 請求計算服務 每個節點(Peer)既是客戶機也是服務器 永久在線 間歇接入網絡 節點間…

基于 Spring Boot + Vue 實現人臉采集功能全流程

一、技術棧與依賴引入 后端依賴 (pom.xml) <!-- 百度AI SDK --> <dependency><groupId>com.baidu.aip</groupId><artifactId>java-sdk</artifactId><version>4.16.19</version><exclusions><exclusion><grou…

《Python基礎》第3期:使用PyCharm編寫Hello World

我們寫文檔大多用 Word、寫表格大多用 Excel、寫幻燈片大多用 PPT。 寫代碼也需要一個軟件作為編輯器&#xff08;傳說的大神用記事本寫代碼純屬玩笑了&#xff0c;越是大神越追求效率&#xff0c;用的軟件功能越強&#xff09;。 Python 現在已經有了非常多的代碼編輯器&#…