[實踐] Uni-App 在團隊的使用總結

最近使用 Uni-App 的感受。
從團隊成員和成本來考慮,團隊從 React 轉向了 Vue 技術棧。

使用體驗

沒用之前以為真和 Vue 一樣,用了之后才知道。這喵的是 Vue 和 小程序的結合體吖。寫類似小程序的標簽,Vue 的語法。對比 Uni-App 文檔和微信小程序的文檔,不差多少,只是將 wx => uni,熟悉 Vue 和 小程序可以直接上手。

需要注意看注意事項,給出了和 Vue 使用的區別。例如動態的 Class 與 Style 綁定,在 H5 能用,APP 和小程序就掛了。

路由

Uni-App 的路由全部配置在 pages.json 文件里,就會導致多人開發的時候,路由無法拆分,如果處理的不好,經常發生沖突。

里面其他的配置項,見官方文檔就可以處理了。

導航

導航欄需要注意的一個問題就是不同端的展示形式會不同,所以要處理兼容問題,導航欄可以自定義,用原生,框架,插件但是兼容性都不同,多端需求一定要在不同設備跑一下看效果。

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

兼容方法就是用 Uni-App 提供的條件編譯,處理各端不同的差異。支付的業務也是通過條件編譯,區分不同端調用不同的支付方式。

生命周期

應用的生命周期、頁面的生命周期、組件的生命周期。大致上和 Vue 的差不多,頁面生命周期針對當前的頁面,應用生命周期針對小程序、APP。這些坑的過程都要踩一下!

網絡請求

官方的 uni.request 雖然封裝好了基本的請求,但是沒有攔截,我們開始也是自己在這基礎上加了層殼,簡單的封裝發送請求。后面是選擇了第三方庫的使用,如 flyio、axios。

資源優化

  • 不涉及 Webpack 之類的資源打包優化,但是文檔中有提到資源預取、預加載、treeShaking 只需要在配置文件中設置即可,或者在開發工具勾上。小程序也是勾選自動壓縮混淆。
  • 刪除沒用到文件和圖片資源,因為打包的時候是會算進去的,比如 static 目錄下的資源文件都會被打包,而且圖片資源太大也不好。
  • Uni-App 運行時的框架主庫 chunk-vendors.js 文件是經過處理的,部署做 gZip

Web-View

在 Uni-App 中使用 WebView,可以使用本地的資源和網絡的資源,不同平臺也是有差異的,小程序不支持本地 HTML,且小程序端 WebView 組件一定有原生導航欄。

需要注意的是網頁向應用 postMessage 的時候需要引入 uni.web-view.js,不然是沒辦法通信拿不到數據。

全局狀態

小程序中要在每一個頁面中添加使用共有的數據,可以有三種方式解決。

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??梢杂镁W約車來比喻,三種類型分別對應:專車、快車、順風車。都足夠靈活,表現在代碼里:一處導入,處處可用。

再分別說明:

new Vue() 就像滴滴的禮橙專車,官方運營,安全可靠。表現在代碼里,就是只有 Vue 官方維護的庫才能使用這種方式。

Vue.use() 就像快車,必須符合滴滴的規范,才能成為專職司機。表現在代碼中,就是導入的插件(或者庫)必須符合 Vue 的寫法(即封裝了 Vue 插件寫法)。

Vue.prototype 像順風車,要求沒上面兩個那么嚴,符合一般 js 寫法就行,就像順風車的準入門檻稍稍低一點。

當然,Uni-App 的項目里還有可以用 globalData 定義全局變量,非要比喻,可以用地鐵,首先比 vue-bus 更好管理維護,想象地鐵是不是比公交更可靠;其次比 Vuex 更簡單,因為 globalData 真的就是簡單的定義一些變量。

globalData 是微信小程序發明的,Vue 項目好像沒有對應的概念,但是在 Uni-App 中一樣可用。

上面說到,這種分類方式不嚴謹,主要體現在原理上,并不是簡單的并列關系或包含關系。

插件市場

用得比較好的組件:

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 開發體驗好一點。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。