Web+js轉uni-app+ts

一、入手uni-app

官方文檔:uni-app官網

1.創建uni-app項目

1.1通過HBuilderX進行創建

官方地址:HBuilderX-高效極客技巧

1.2通過命令行創建
// js 版本的
npx degit dcloudio/uni-preset-vue#vite 項目名
npx degit dcloudio/uni-preset-vue#vite-alpha 項目名// ts版本的
npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project

js版本的鏈接:下載倉庫 · DCloud/uni-preset-vue - Gitee.com

ts版本的鏈接:下載倉庫 · DCloud/uni-preset-vue - Gitee.com

若使用 npx 下載的時候失敗,可以換手機熱點試試

注:下面我用的都是uni-app+ts

2.引入組件庫

2.1 uni-ui
// uni-ui
pnpm @dcloudio/uni-ui

配置自動導入組件

// pages.json
{// 組件自動導入"easycom": {"autoscan": true,"custom": {// uni-ui 規則如下配置  "^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue" }},"pages": [// …省略]
}

這個自動導入的方法很好用,在項目中我們有一些組件是在一個模塊內,那么我們可以讓這些組件有個同樣的前綴名,然后通過正則表達式把這些組件整合在一起,然后可以全局調用了,不需要在使用某一個組件的時候再格外調用,減少了一些代碼的重復。比如說這里的:^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue ,意思就是組件以 'uni-' 開頭的就會被找到,這個路徑就是組件的路徑 '$1' 是占位符,所以如果當我想用 uni-badge 的時候,我就不需要再去 impor導入它,直接就能用,因為這個組件的路徑是:@dcloudio/uni-ui/lib/uni-badge/uni-badge.vue

舉一反三

我們在項目中一般會有一個公共組件對吧,我們就可以用上來,如果結構是這樣的

/src/components/LN-compent1.vue/LN-compent2.vue/LN-...                 

這個時候就可以在custom里面加上,這樣使用這些組件的時候就不用苦哈哈的去導入了

"easycom": {"autoscan": true,"custom": {// uni-ui 規則如下配置  "^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue" ,"^LN-(.*)": "@/components/LN-$1.vue"}

2.2安裝聲明文件

pnpm i -D @uni-helper/uni-app-types@latest @uni-helper/uni-ui-types@latest

然后需要在tsconfig.json 里面進行配置

{// "extends": "@vue/tsconfig/tsconfig.json","compilerOptions": {"allowJs": true,"sourceMap": true,"baseUrl": ".","paths": {"@/*": ["./src/*"]},"lib": ["esnext", "dom"],// 從這里開始都是自己配置的"types": ["@dcloudio/types","miniprogram-api-typings","@uni-helper/uni-app-types","@uni-helper/uni-ui-types"]},"vueCompilerOptions": {"plugins": ["@uni-helper/uni-app-types/volar-plugin"]},"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]
}

2.3?pinia

pnpm i pinia-plugin-persistedstate

跟之前web端的一樣,如果想實現持久化就需要用上persist

{persist:true
}

不過uni-app為了兼容多端的API,需要這么寫

    persist: {// 調整為兼容多端的APIstorage: {setItem(key, value) {uni.setStorageSync(key, value) },getItem(key) {return uni.getStorageSync(key) },},}

2.4 vscode中的插件

3.攔截器

不管是什么端的攔截器,無非就是響應攔截和請求攔截,區別就是web之前我用的axios,這里用的uni.request

import { useMemberStore } from '@/stores'const baseURL = 'https://pcapi-xiaotuxian-front-devtest.itheima.net'// 攔截器配置
const httpInterceptor = {// 攔截前觸發invoke(options: UniApp.RequestOptions) {// 不是以http開頭的if (!options.url.startsWith('http')) {options.url = baseURL + options.url}// 請求超時options.timeout = 10000// 添加小程序請求頭標識options.header = {'source-client': 'miniapp',...options.header,}// 添加 token 請求頭標識const memberStore = useMemberStore()const token = memberStore.profile?.tokenif (token) {options.header.Authorization = token}},
}// 攔截request請求
uni.addInterceptor('request', httpInterceptor)
// 攔截 uploadFile 文件上傳
uni.addInterceptor('uploadFile', httpInterceptor)type Data<T> = {code: stringmsg: stringresult: T
}export const http = <T>(options: UniApp.RequestOptions) => {return new Promise<Data<T>>((resolve, reject) => {uni.request({...options,success(res) {if (res.statusCode >= 200 && res.statusCode < 300) {resolve(res.data as Data<T>)} else if (res.statusCode === 401) {// 401錯誤  清理用戶信息,跳轉到登錄頁const memberStore = useMemberStore()memberStore.clearProfile()uni.navigateTo({ url: '/pages/login/login' })reject(res)} else {uni.showToast({icon: 'none',title: (res.data as Data<T>).msg || '請求錯誤',})reject(res)}},fail(err) {uni.showToast({icon: 'none',title: '網絡錯誤,換個網絡試試',})reject(err)},})})
}

二、三大件的寫法

1.所有的塊級標簽都用<view>標簽代替了

2.span、label等等所有內聯元素替換為text標簽

3.img替換成了image

三、路由

1.路由的配置在pages.json

2.路由跳轉使用uni.navigateTo而不是router.push()了

四、其他

1.盡量不要用npm,要不然提交發布的時候,如果體積太大會失敗

2.在使用import.meta.env.DEV 進行開發的時候,要記得去tsconfig.json 里面配置;不然就會報錯:

"僅當 '--module' 選項為 'es2020'、'es2022'、'esnext'、'system'、'node16'、'node18'、'node20' 或 'nodenext' 時,才允許使用 'import.meta' 元屬性。"

"module": "ESNext", // 或 "es2020"、"node16" 等錯誤提示中允許的值
"moduleResolution": "bundler", // 配合Vite等構建工具時推薦,或對應 "node16"

注:import.meta.env.DEV?是 Vite 構建工具提供的環境變量,用于判斷當前是否為開發環境。如果是開發環境就為true。

3.TS有一個很重要的點,就是他的數據類型是顯式的,當我們定義某個對象的type的時候,特別是從后端獲取到的某個數據的類型參數的時候,要記得和后端保持一致,不然也會報錯;

比如說:我在數據庫里的數據是

那么我定義這個返回的數據對象的類型里面的參數名要一模一樣的對應好

4.在使用封裝好的網絡請求的時候,要渲染的數據要在請求中獲取,不要在其他區域傳遞

比如說:我有一個封裝好的getCategoryAPI,subCategoryList要在這個函數里面完成,不要丟到外面去引用,不然會報錯找不到children,但是事實上children也是包含在內的參數

。。。有發現問題繼續在這個博文更新

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

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

相關文章

IO_hw_8.29

1.使用fgets和fputs完成兩個文件的拷貝&#xff0c;要求文件名使用外部傳承2.注冊登錄代碼3.思維導圖4.牛客網刷題記錄

數據結構(04)—— 棧和隊列

Hi&#xff01;探索者們&#x1f609;&#xff0c;歡迎踏入 408 數據結構的奇妙秘境&#x1f33f;&#xff01;? 我是 ankleless&#x1f4da;&#xff0c;和你并肩的尋寶人&#xff5e; 這是我的探險手札&#x1f5fa;?&#xff0c;里面記著鏈表森林的岔路陷阱&#x1f578;…

Java多線程基礎:進程、線程與線程安全實戰

Java多線程基礎&#xff1a;進程、線程與線程安全實戰 &#x1f680; 極客小貼士 &#x1f4a1; 你知道嗎&#xff1f; 在Java中&#xff0c;每個線程都有自己的棧空間&#xff0c;但共享堆內存。這就像每個員工都有自己的辦公桌&#xff0c;但共享公司的會議室和打印機&#…

2025 實測有效!手把手教你如何用實例代碼(Python、JavaScript 、JAVA) 等實戰代碼,免費股票數據接口大全

? 近年來&#xff0c;股票量化分析憑借其科學性與系統性&#xff0c;逐漸走進大眾視野并受到廣泛關注。對于這一領域的初學者而言&#xff0c;入門路上的第一道關卡便是如何獲取全面且精準的股票數據。要知道&#xff0c;實時交易數據、歷史交易記錄、財務數據以及基本面信息等…

KMP 算法相關練習題

大家好&#xff0c;今天是2025年8月31日&#xff0c;上一期我給大家分享了 KMP 算法的相關知識&#xff0c;今天我來帶領大家學習4道 KMP 相關的算法題。 在學習算法題之前&#xff0c;還是希望大家能夠要先學會 KMP 算法&#xff08;可以參考這篇文章&#xff1a;KMP 算法&am…

張柏芝亮相林家謙演唱會 再次演繹《任何天氣》

近日&#xff0c;張柏芝作為特別嘉賓亮相歌手林家謙演唱會。當天&#xff0c;張柏芝身著一襲淺米色蕾絲裙裝&#xff0c;輕盈面料搭配層疊設計&#xff0c;行走間裙擺微揚&#xff0c;溫柔氣質滿溢&#xff0c;為舞臺增添了一抹溫柔亮色。舞臺上&#xff0c;張柏芝接連演繹《任…

Android 權限申請現代化指南

Android 權限申請現代化指南 一、核心概念&#xff1a;權限分類 Android 將權限分為三大類&#xff0c;申請方式各不相同&#xff1a; 普通權限 (Normal Permissions)范圍&#xff1a;涉及應用沙盒外部但對用戶隱私或設備操作風險極低的操作。示例&#xff1a;網絡訪問 (IN…

大話 IOT 技術(3) -- MQTT篇

文章目錄前言前情提要MQTT介紹組成萬惡的appmqtt服務端偽代碼實現開源的力量后話當你迷茫的時候&#xff0c;請點擊 物聯網目錄大綱 快速查看前面的技術文章&#xff0c;相信你總能找到前行的方向 前言 本篇將開始講述IOT技術的一個重點&#xff0c;mqtt協議。 我發現有一個…

大語言模型生成的“超齡勞動者權益保障制度系統化完善建議(修訂版)”

大綱 │ ├── 一、基于征求意見稿現狀的評估 │ ├── 制度意義&#xff1a;25條暫行規定首次明確權益范圍&#xff0c;提供法律依據 │ └── 關鍵缺陷 │ ├── 法律定位不明確 │ ├── 社保銜接不足 │ └── 實施機制不完善 │ ├── 二、法…

【UnityAS】Unity Android Studio 聯合開發快速入門:環境配置、AAR 集成與雙向調用教程

這是一篇2021年的存檔&#xff0c;使用Unity2020版本。 至今&#xff0c;Unity與AS很多通訊方式也是基于此衍生。 作為Unity與AS聯合開發的受益者&#xff0c;難得掏出自己的飯碗&#xff0c;諸君共享&#xff01; Unity & Android Studio 聯合開發快速入門 ——Unity與AS…

前后端聯合實現多個文件上傳

1、前端 Vue3CommonApplyBasicInfoForm.vue<script setup lang"ts" name"CommonApplyBasicInfoForm"> ...... // 文件輸入實例對象 const fileInputRef ref<HTMLInputElement | null>(null); // 選擇文件列表 const selectedFiles ref<Fi…

軟考高級--系統架構設計師--綜合知識真題解析

系列文章目錄 文章目錄系列文章目錄一、2019年真題二、2020年真題三、2021年真題四、2022年真題總結一、2019年真題 二、2020年真題 三、2021年真題 四、2022年真題 總結

“帕薩特B5鉗盤式制動器結構設計三維PROE模型7張CAD圖紙PDF圖“

摘 要本文首先對汽車制動器原理和對各種各樣的制動器進行分析,詳細地闡述了各類制動器的結構,工作原理和優缺點。再根據轎車的車型和結構選擇了適合的方案。根據市場上同系列車型的車大多數是滑鉗盤式制動器,而且滑動鉗式盤式制動器結構簡單,性能居中,設計規范,所以我選擇滑動…

SQL注入6----(其他注入手法)

一.前言 本章節來介紹一下其他的注入手法&#xff0c;也就是非常規注入手法&#xff0c;來和大家介紹一下 二.加密注入 前端提交的有些數據是加密之后&#xff0c;到了后臺在解密&#xff0c;然后再進行數據庫查詢等相關操作的&#xff0c;那么既然如 此我們也應該將注入語句…

visual studio2022 配置 PCL 1.13.1

PCL庫下載 下載鏈接&#xff1a; https://github.com/PointCloudLibrary/pcl/releases 下載這兩個。 PCL庫安裝 運行.exe文件進行安裝。 環境變量勾第二個&#xff08;其實無所謂&#xff0c;反正還要添加別的環境變量&#xff0c;這里沒選之后加也一樣&#xff09;。 安裝…

金融學-貨幣理論

前言 前面學習了什么是貨幣供給&#xff0c;貨幣供給的決定以及聯邦儲備體系在貨幣供給中所起的作用。現在我們要開始探討經濟中貨幣供給在決定價格水平與全部商品和勞務(總供給)中的作用。關于貨幣對經濟影響的研究&#xff0c;稱為貨幣理論(monetarythe-ory) 貨幣數量論 古典…

Visio繪圖——給多邊形增加連接線

每次在畫項目框圖和各類爪圖的時候&#xff0c;連接線是最煩人的&#xff0c;雖然選擇的是折線&#xff0c;單往往事與愿違。 下面就記錄一下&#xff0c;如何查找各類連接線。 1、先展開左側菜單欄&#xff0c;點擊如下所示的“&#xff1e;”2、在展開的界面&#xff0c;再次…

【開題答辯全過程】以 付費自習室系統小程序為例,包含答辯的問題和答案

個人簡介一名14年經驗的資深畢設內行人&#xff0c;語言擅長Java、php、微信小程序、Python、Golang、安卓Android等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧。感謝大家的…

開疆智能Profinet轉EtherCAT網關連接TR-Electronic傳感器配置案例

本案例是通過開疆智能研發的Profinet轉EtherCAT網關將傳感器數據傳送到PLC&#xff0c;由于兩邊設備采用協議不同&#xff0c;故而使用網關進行轉換。網關配置&#xff1a;打開網關配置軟件“EtherCAT Manager”并新建項目。根據不通網關型號也可選擇ModbusTCP&#xff0c;Ethe…

VSCode中使用Markdown

文章目錄1. 背景2. 安裝插件3. 基礎寫作與預覽4. 生成PDF文檔5. 插入代碼6. 插入圖片7. 小結1. 背景 編程技術人員&#xff0c;很多人寫作習慣用Markdown格式吧。 首先Markdown很簡單&#xff0c;第二它的層次結構特別清晰&#xff0c;再然后它對嵌入圖片、代碼的支持很優秀。…