鑑於在下使用微信小程式開發時使用setData
的蹩腳體驗,開發了個函式庫函數wx-updata
,專案上線之後,我把這個自用的函式庫函數整理放到Github 上開源出來wx-updata,這個函式庫函數在開發的時候對我很有幫助,希望也可以幫到大家
如果大家在使用中遇到了問題,可以給我提pr,提issue,一起來改善小程式開發體驗~
#wx-updata
版本0.0.10#Github 位址: github.com/SHERlocked9…
-
小程式碼片段預覽位址: developers.weixin.qq.com/s/CcXdO1mc7…
小程式碼片段程式碼位址: github.com/SHERlocked9…
1.setData 不方便的地方
你在使用setData
的時候,是不是有時候覺得很難受,舉個簡單的例子:
// 你的 datadata: { name: '蜡笔小新', info: { height: 140, color: '黄色' } }复制代码
如果要修改info.height
為155,使用 setData
要怎麼做呢:
// 这样会把 info 里其他属性整不见了this.setData({ info: { height: 155 } })// 你需要取出 info 对象,修改后整个 setDataconst { info } = this.data info.height = 155this.setData({ info })复制代码
似乎不太複雜,但如果data
是個很大的對象,要把比較深且不同的物件、陣列項挨個改變:
data: { name: '蜡笔小新', info: { height: 140, color: '黄色', desc: [{ age: 8 }, '最喜欢大象之歌', '靓仔', { dog: '小白', color: '白色' }] } }复制代码
例如某個需求,需要把info.height
改為155,同時改變info.desc
陣列的第0 項的age
為12,第3 項的color
為灰色呢?
// 先取出要改变的对象,改变数字后 setData 回去const { info } = this.data info.height = 155info.desc[0].age = 12info.desc[3].color = '灰色'this.setData({ info })// 或者像某些文章里介绍的,这样可读性差,也不太实用this.setData({ 'info.height': 155, 'info.desc[0].age': 12, 'info.desc[3].color': '灰色'})复制代码
上面這兩種方法,是我們平常小程式裡常用的,和其他Web 端的框架相比,就很蹩腳,一種濃濃的半成品感撲面而來,有沒有這樣一個方法:
this.upData({ info: { height: 155, desc: [{ age: 12 }, , , { color: '灰色' }] } })复制代码
這個方法會幫我們深度改變嵌套物件裡對應的屬性值,跳過陣列項裡不想改變的,只設定我們提供了的屬性值、陣列項,豈不是省略了一大堆蹩腳的程式碼,而且可讀性也極佳呢。
這就是為什麼我在上線的項目中使用wx-updata,而不是setData
wx-updata 的原理其實很簡單,舉個例子:
this.upData({ info: { height: 155, desc: [{ age: 12 }] } })// 会被自动转化为下面这种格式,// this.setData({// 'info.height': 155,// 'info.desc[0].age': 12,// })复制代码
原來這個轉換工作是要我們自己手動來做,現在wx-updata 幫我們做了,豈不美哉!
下面介紹wx-updata 的優點和主要使用方法~
2. wx-updata 的優點
- 支援
setData
對象自動合併,不用寫蹩腳的物件路徑了 - 支援物件中嵌套數組,在數組中嵌套物件;
- 如果數組的某個值你不希望覆蓋,請使用數組空位來跳過這個數組項,例如
[1,,3]
這個數組中間就是數組空位; - 如果數組空位你的
Eslint
報錯,可以使用wx-updata
提供的Empty 來代替:[1, Empty, 3]
- 如果陣列空位你不習慣,或不樂意數逗號個數,可以試試試數組的物件路徑方式
[1,,3]
->{'[0]': 1, '[2]': 3}
3. wx-updata 安裝
你也可以直接把
dist
目錄下的wx-updata.js
拷貝到專案裡使用
使用npm
、yarn
安裝方式:
$ npm i -S wx-updata# or$ yarn add wx-updata复制代码
然後:
- 把微信開發者工具面板右側的
詳情- 本地設定- 使用npm模組
按鈕開啟; - 點擊微信開發者工具面板工具列的
工具- 建立npm
;
建置後成功產生miniprogram_npm
資料夾就可以正常使用了
4. wx-updata 使用方法
使用方式一
#可以使用直接掛載到Page
上的方式,這樣就可以在Page
實例中像使用setData
一樣使用upData
#了
// app.jsimport { updataInit } from './miniprogram_npm/wx-updata/index' // 你的库文件路径App({ onLaunch() { Page = updataInit(Page, { debug: true }) } })复制代码
// 页面代码中this.upData({ info: { height: 155 }, desc: [{ age: 13 }, '帅哥'], family: [, , [, , , { color: '灰色' }]] })复制代码
使用方式二
有的框架可能在Page
物件上進行了進一步修改,直接替換Page
的方式可能就不太好了,wx-updata
同樣暴露了工具方法,用戶可以在頁面程式碼中直接使用工具方法進行處理:
// 页面代码中import { objToPath } from './miniprogram_npm/wx-updata/index' // 你的库文件路径Page({ data: { a: { b: 2}, c: [3,4,5]}, // 自己封装一下 upData(data) { return this.setData(objToPath(data)) }, // 你的方法中或生命周期函数 yourMethod() { this.upData({ a: { b: 7}, c: [8,,9]}) } })复制代码
使用Empty 代替數組空位
#可以使用wx-updata
提供的Empty 來取代陣列空位,由於Empty 本質上是一個Symbol,所以只能使用wx-updata
導出的,而不能自己新建。
// 页面代码中import { Empty } from './miniprogram_npm/wx-updata/index'this.upData({ info: { height: 155 }, desc: [{ age: 13 }, '帅哥'], family: [Empty, Empty, [Empty, Empty, Empty, { color: '灰色' }]] })复制代码
數組的物件路徑方式
如果數組空位你不習慣,或者不樂意數逗號個數,可以試試數組的物件路徑方式,需要傳遞config 的配置 {arrObjPath: true}
// 页面代码中import { Empty } from './miniprogram_npm/wx-updata/index'// 原来的方式this.upData({ info: { height: 155 }, desc: [, '靓仔'], family: [, , [, , , { color: '灰色' }]] })// 使用数组路径方式this.upData({ info: { height: 155 }, desc: {'[1]': '靓仔'}, family: { '[2]': { '[3]': { color: '灰色' } })复制代码
5. wx-updata 相關API
Page.prototype.upData(Object data, Function callback)
-
data
: 你希望設定的data -
callback
: 跟setData 第二個參數一樣,會引起介面更新渲染完畢後的回呼函數
updataInit(Page, config)
-
#Page
: 頁面對象,需要在app.js
中呼叫; -
config
配置- 配置參數
{ debug: true }
,會將路徑化後的data 列印出來,幫助使用者進行調試,預設false 不開啟; - 配置參數
{ arrObjPath: true }
,會開啟陣列的物件路徑方式功能,預設false 不開啟;
- 配置參數
#objToPath(Object data, Object config)
-
data
: 你希望設定的data 物件 -
#config
設定- 設定參數
{ arrObjPath: true }
,會開啟陣列的物件路徑方式功能,預設false 不開啟;
- 設定參數
#更多相關免費學習推薦:微信小程式開發
以上是開發微信小程序,為什麼只使用 upData的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

記事本++7.3.1
好用且免費的程式碼編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3 Linux新版
SublimeText3 Linux最新版