UniApp 優化實踐:使用常量統一管理本地存儲 Key,提升可維護性

在 UniApp 項目開發中,隨著功能的增加,本地存儲(如?uni.setStorageSync)的使用頻率也會增加。如果直接在代碼中硬編碼 key 值,不僅容易出錯,也難以后期維護。

本文將以“自定義導航欄適配狀態欄高度”為例,帶你實現一個更優雅、更易維護的本地存儲 key 管理方式?—— 使用常量統一管理 key 值,提升代碼的可讀性和可維護性。


一、問題:硬編碼 key 值的弊端

在之前的代碼中,我們是這樣存儲狀態欄高度的:

uni.setStorageSync('GM_STATUS_BAR_HEIGHT', result.statusBarHeight)

這種方式雖然可以實現功能,但存在以下問題:

  • 拼寫錯誤風險高:比如寫成?'GM_STATUS_BAR_HEIGHTD',難以發現;
  • 不易維護:如果后續要修改 key 名,需要全局搜索替換;
  • 缺乏統一管理:多個 key 分散在不同文件中,維護成本高。

二、解決方案:使用常量集中管理 key

我們可以創建一個常量文件,集中管理所有本地存儲的 key,例如:

? 創建常量文件:constant/index.uts

export const GM_STATUS_BAR_HEIGHT = 'GM_STATUS_BAR_HEIGHT'

推薦使用?constant?或?storageKeys?等命名方式作為目錄名,統一管理所有本地存儲的 key。


三、修改 App.vue:使用常量進行存儲

在?App.vue?的?onLaunch?生命周期中,我們引入常量并使用它進行本地存儲:

import { GM_STATUS_BAR_HEIGHT } from '@/constant/index.uts'export default {onLaunch() {uni.getSystemInfo({success: (result) => {uni.setStorageSync(GM_STATUS_BAR_HEIGHT, result.statusBarHeight)}})}
}

? 這樣做的好處是:

  • key 值統一管理,避免重復或拼寫錯誤;
  • 后期維護只需修改常量文件,無需逐個查找代碼;
  • 提升代碼可讀性,其他開發者更容易理解。

四、頁面中使用常量讀取 key

在需要讀取狀態欄高度的頁面中,同樣引入常量并使用它讀取本地存儲:

import { GM_STATUS_BAR_HEIGHT } from '@/constant/index.uts'export default {data() {return {statusHeight: 0}},onLoad() {uni.getStorage({key: GM_STATUS_BAR_HEIGHT,success: (res) => {this.statusHeight = res.data}})}
}

這樣,頁面和 App.vue 使用的是同一個 key 常量,確保數據一致性。


五、進階建議:擴展常量管理更多 key

隨著項目功能的增加,你可能會用到更多本地存儲的 key,例如:

export const GM_STATUS_BAR_HEIGHT = 'GM_STATUS_BAR_HEIGHT'
export const GM_USER_TOKEN = 'GM_USER_TOKEN'
export const GM_USER_INFO = 'GM_USER_INFO'
export const GM_APP_VERSION = 'GM_APP_VERSION'

這樣你就可以在項目中統一使用這些常量,避免 key 的重復和混亂。


六、額外優化:封裝本地存儲工具類(可選)

為了進一步提升可維護性,你還可以封裝一個本地存儲工具類,統一處理讀寫邏輯:

? 示例:utils/storage.uts

import { GM_STATUS_BAR_HEIGHT } from '@/constant/index.uts'const get = (key: string): any => {const res = uni.getStorageSync(key)return res
}const set = (key: string, value: any): void => {uni.setStorageSync(key, value)
}export default {get,set,GM_STATUS_BAR_HEIGHT
}

然后在頁面中使用:

import storage from '@/utils/storage.uts'export default {onLoad() {const height = storage.get(storage.GM_STATUS_BAR_HEIGHT)this.statusHeight = height}
}

這樣,不僅 key 統一管理,讀寫邏輯也統一封裝,后期維護更加輕松。


七、總結

通過本文的講解,我們實現了:

  • 將本地存儲的 key 值統一管理為常量;
  • 在?App.vue?和頁面中統一使用常量,避免硬編碼;
  • 提高了代碼的可讀性、可維護性和可擴展性;
  • 可選地封裝了本地存儲工具類,實現更優雅的代碼結構。

在實際項目中,這種“常量集中管理 + 工具封裝”的方式,能顯著提升開發效率,降低維護成本。


📌?小貼士:

  • 常量命名建議使用大寫加下劃線格式(如?GM_STATUS_BAR_HEIGHT);
  • key 建議加上項目前綴(如?GM_),避免與第三方插件沖突;
  • 所有常量建議統一放在?constant?或?constants?目錄中;
  • 可進一步結合 TypeScript 接口或枚舉,增強類型安全。

如果你覺得這篇文章對你有幫助,歡迎點贊、收藏或分享給需要的朋友!也歡迎關注我的技術博客,獲取更多 UniApp 開發實戰技巧。🚀

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

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

相關文章

計算機網絡:(八)網絡層(中)IP層轉發分組的過程與網際控制報文協議 ICMP

計算機網絡:(八)網絡層(中)IP層轉發分組的過程與網際控制報文協議 ICMP前言一、IP層轉發分組的過程第一步:接收數據包并解封裝第二步:提取目標 IP 地址第三步:查詢路由表第四步&…

Python爬蟲實戰:研究concurrent-futures庫相關技術

1. 引言 1.1 研究背景與意義 網絡爬蟲作為互聯網數據采集的重要工具,在信息檢索、輿情分析、學術研究等領域具有廣泛應用。隨著互聯網數據量的爆炸式增長,傳統單線程爬蟲的效率已難以滿足需求,并發爬蟲技術成為研究熱點。 1.2 相關工作 現有爬蟲框架如 Scrapy、Beautifu…

Neo4j 框架 初步簡單使用(基礎增刪改查)

Neo4j 是一個高性能的、開源的圖數據庫。它將數據存儲為圖結構,其中節點表示實體,邊表示實體之間的關系。這種圖數據模型非常適合處理復雜的關系型數據,能夠高效地進行關系查詢和遍歷。 Neo4j 的主要特性包括: 強大的圖查詢語言 C…

【iOS】鎖[特殊字符]

文章目錄前言1??什么是鎖🔒?1.1 基本概念1.2 鎖的分類2??OC 中的常用鎖2.1 OSSpinLock(已棄用):“自旋鎖”的經典代表為什么盡量在開發中不使用自旋鎖自旋鎖的本質缺陷:忙等待(Busy Waiting…

在easyui中如何設置自帶的彈窗,有輸入框

這個就是帶input的確認彈框($.messager.prompt)// 使用prompt并添加placeholder提示 $.messager.prompt(確認, 確定要將事故記錄標記為 statusText 嗎?, function(r) {if (r) {// r 包含用戶輸入的內容var remark r.trim();// 驗證輸入不為…

Android-API調用學習總結

一、Postman檢查API接口是否支持1.“HTTP Request” 來創建一個新的請求。——請求構建界面,這是你進行所有 API 調用的地方。2.設置請求方法和 URL:選擇請求方法: 在 URL 輸入框左側,有一個下拉菜單。點擊它,選擇你想…

《計算機網絡》實驗報告一 常用網絡命令

目 錄 1、實驗目的 2、實驗環境 3、實驗內容 3.1 ping基本用法 3.2 ifconfig/ipconfig基本用法 3.3 traceroute/tracert基本用法 3.4 arp基本用法 3.5 netstat基本用法 4、實驗結果與分析 4.1 ping命令的基本用法 4.2 ifconfig/ipconfig命令的基本用法 4.3 tracer…

MySQL深度理解-深入理解MySQL索引底層數據結構與算法

1.引言在項目中會遇到各種各樣的慢查詢的問題,對于千萬級的表,如果使用比較笨的查詢方式,查詢一條SQL可能需要幾秒甚至幾十秒,如果將索引設置的比較合理,可以將查詢變得仍然非常快。2.索引的本質索引:幫助M…

Django母嬰商城項目實踐(九)- 商品列表頁模塊

9、商品列表頁模塊 1、業務邏輯 商品模塊分為:商品列表頁 和 商品詳情頁 商品列表頁將所有商品按照一定的規則排序展示,用于可以從銷量、價格、上架時間和收藏數量設置商品的排序方式,并且在商品左側設置分類列表,選擇某一個分類可以篩選出對應的商品信息。 商品列表頁…

8、STM32每個系列的區別

1、F1和F4的系列的區別 F1采用Crotex M3內核,F4采用Crotex M4內核。F4比F1的主頻高。F4具有浮點數運算單元,F1沒有浮點單元。F4的具備增強的DSP指令集。F407的執行16位DSP指令的時間只有F1的30%~70%。F4執行32位DSP指令的時間只有F1的25% ~ 60%。F1內部S…

DeepSPV:一種從2D超聲圖像中估算3D脾臟體積的深度學習流程|文獻速遞-醫學影像算法文獻分享

Title題目DeepSPV: A deep learning pipeline for 3D spleen volume estimation from 2Dultrasound imagesDeepSPV:一種從2D超聲圖像中估算3D脾臟體積的深度學習流程01文獻速遞介紹1.1 臨床背景 脾腫大指脾臟增大,是多種潛在疾病的重要臨床指標&#x…

病歷數智化3分鐘:AI重構醫院數據價值鏈

一、方案概述本方案針對某省醫聯體醫院病例數據管理需求,通過AI技術實現病歷數字化→信息結構化→數據應用化的全流程改造。系統采用雙端協同架構: - 普通用戶端:為一線醫護人員提供病歷拍攝、AI識別修正、安全上傳功能 - 管理員后臺&#…

CSS+JavaScript 禁用瀏覽器復制功能的幾種方法

🛡? 禁用瀏覽器復制功能完整指南 網頁中禁用用戶的復制功能,包括 CSS 方法、JavaScript 方法、綜合解決方案以及實際應用場景。適用于需要保護內容版權、防止惡意爬取或提升用戶體驗的場景。 📋 目錄 🚀 快速開始&#x1f3a8…

Java 虛擬線程在高并發微服務中的實戰經驗分享

Java 虛擬線程在高并發微服務中的實戰經驗分享 虛擬線程(Virtual Threads)作為Java 19引入的預覽特性,為我們在高并發微服務場景下提供了一種更輕量、易用的并發模型。本文結合真實生產環境,講述在Spring Boot微服務中引入和使用虛…

《拆解WebRTC:NAT穿透的探測邏輯與中繼方案》

WebRTC以其無需插件的便捷性,成為連接全球用戶的隱形橋梁。但很少有人知曉,每一次流暢的視頻對話背后,都藏著一場與網絡邊界的無聲博弈——NAT,這個為緩解IPv4地址枯竭而生的技術,既是網絡安全的屏障,也是端…

前端開發 React 組件優化

1. 使用 React.memo 進行組件優化問題:當父組件重新渲染時,子組件也會重新渲染,即使它的 props 沒有變化。解決方案:使用 React.memo 包裹子組件,讓其只在 props 變化時才重新渲染。示例場景:展示一個顯示計…

變頻器實習DAY12

目錄變頻器實習DAY12一、繼續,柔性平臺測試!上午 王工Modbus新功能測試下午 柔性平臺繼續按照說明書再測一遍附加的小知識點中國貍花貓.git文件附學習參考網址歡迎大家有問題評論交流 (* ^ ω ^)變頻器實習DAY12 一、繼續,柔性平臺測試&…

Redis--多路復用

🧩 一、什么是“客戶端連接”?所謂 客戶端連接 Redis,指的是:一個程序(客戶端)通過網絡連接到 Redis 服務端(比如 127.0.0.1:6379),建立一個 TCP 連接,雙方可…

數組——初識數據結構

一維數組數組的創建數組是一種相同類型元素的集合數組的創建方式C99 中引入了變長數組的概念,變長數組支持數組的大小使用變量來指定明顯這里的vs2019不支持變長數組數組初始化和不完全初始化第二個數組就是典型的不完全初始化,開辟了10個空間&#xff0…

技術速遞|使用 Semantic Kernel 與 A2A 協議構建多智能體解決方案

作者:盧建暉 - 微軟高級云技術布道師 翻譯/排版:Alan Wang 在快速發展的 AI 應用開發領域,能夠協調多個智能體已成為構建復雜企業級解決方案的關鍵。雖然單個 AI 智能體擅長特定任務,但復雜的業務場景往往需要跨平臺、跨框架甚至跨…