微信小程序中的數據存儲實現方式

全局變量globalData

在最初創建小程序時,app.js文件中App方法中傳入的對象裡面默認添加瞭globalData參數。在所有的頁面中我們都可以通過getApp方法獲取到這個App方法傳入的對象,進而拿到其中的globalData。

const App = getApp();
const openId = App.globalData.openId;
App.globalData.openId = 1;
delete App.globalData.openId;

globalData的值是一個對象,我們可以用對待對象的方式一樣調用它。(globalData並非一定叫這個名字)

頁面私有變量 data

每個頁面的js邏輯層頁面都是在Page方法中傳入瞭一個對象。其中data的值一般用來存儲當前頁面內的變量值。其主要用途是通過setData接口和視圖層進行數據交互,從而改變wxml視圖層顯示內容。

如果不需要將data中的值傳入到視圖層中,不建議使用setData而是改用對象方式操作。可以有效節省性能。
在頁面初始化時,data中的數據都會和視圖層進行數據交互。如果進一步處理,我們還可以在對象中添加localData專門存儲當前頁面所需變量

Page({
 data: {
  openId: 123
 },
 localData: {
  timeStamp: Date.now()
 }
})
this.setData({
 openId: 321
})
this.data.openId = 321;
this.localData.timeStamp = Data.now();

storage

storage也是小程序中很常用的一種存儲方式,和全局變量globalData類似。不局限於某個頁面,任何位置都可以通過wx提供的接口獲取到其中的值。

優點是:可以長期存儲,即使退出重新登陸數據不會消失。(上限存儲10M)
缺點是:異步行為,每次存取耗時相對較長。
wx提供瞭增、刪、改、查接口(增、改都是一個set接口),下面隻舉一個存儲數據例子:

異步存儲(根據設備性能的不同,你還真不知道他會存多久)

wx.setStorage({
 key: 'key',
 data: 'value',
 success: res => {
  ...
 }
})
// 支持promise
wx.setStorage({key: 'key', data: 'value'})
 .then(res => {
  ...
 })

同步存儲(會造成阻塞~)

wx.setStorageSync('key', 'value')
...

文件存儲 fileSysteManager

fileSysteManager(下簡稱fs)可以把文字、圖片類型的數據通過文件的方式存儲到本地。存儲上限10M(之前記得200M,後來翻文檔看到的都是10瞭),長期存儲,不刪除小程序數據就不會消失。

寫入:

const fs = wx.getFileSystemManager();
fs.writeFile({
  filePath: `${wx.env.USER_DATA_PATH}/_l${fileName}.txt`,
  data: JSON.stringify(data),
  encoding: 'utf8',
  success(res) { ... }
})
  • filePath中的 env.userDatapath 是wx分配給當前程序的默認空間,coder可以在其下創建文件夾,添加文件等。
  • fileName是存儲數據時的文件名。
  • data是要存儲的數據,可以是圖片。
  • encoding:編碼格式,當data為圖片時可已調整為二進制。

讀取

存取數據時要牢記文件名和存儲位置;

fs.readFile({
  filePath: `${wx.env.USER_DATA_PATH}/_l${fileName}.txt`,
  encoding: 'utf8',
  position: 0,
  success(res) {
 JSON.parse(res.data) 
  }
})

移除

fs.unlink({
  filePath: `${wx.env.USER_DATA_PATH}/_l${fileName}.txt`,
  encoding: 'utf8',
  success(res) {
 ...
  }
})

fs的操作都是異步行為,要註意處理邏輯。

到此這篇關於微信小程序中的數據存儲實現方式的文章就介紹到這瞭,更多相關小程序數據存儲內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: