本地存储

@Storage
案例

app.js - 启动时 onLaunch 拉取本地缓存的日志记录

const logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs)

log.js - 拉取并处理|格式化日志

this.setData({
    logs: (wx.getStorageSync('logs') || []).map(log => {
        return {
            date: util.formatTime(new Date(log)),
            timeStamp: log
        }
    })
})

早期版本的API,复合数据的保存和存储需要经过序列化 JSON.stringify 和解析 JSON.parse;现在可以直接使用

概述
以值对key-value的形式在客户端永久保存数据
单个 key 允许存储的最大数据长度为 1MB,所有数据存储上限为 10MB
保存的数据 data|value:只支持原生类型、Date、及能够通过JSON.stringify序列化的对象
应:只进行数据的持久化存储,不应:用于运行时的数据传递或全局状态管理。启动过程中过多的同步读写存储,会显著影响启动
更多本地缓存,可以访问 HTML storage
查看
调试器 → Storage
API
所有的API都支持同步调用或异步调用
异步调用的API以Sync结束
本地存储 API
同步 异步
wx.setStorage wx.setStorageSync
wx.getStorage wx.getStorageSync
wx.removeStorage wx.removeStorageSync
wx.clearStorage wx.clearStorageSync
保存数据 set
wx.setStorage(Object object)
wx.setStorageSync(string key, any data)

保存的时候,必须指定key和data

保存成功,返回 errMsg: "setStorage:ok"

wx.setStorage({
    key:'msg',
    data:'hi, there.',
    success:res=>console.log(res),
    fail:err=>console.log(err),
    complete:()=>console.log('set done log')
})
获取数据 get
wx.getStorage(Object object)
wx.getStorageSync(string key)

获取的时候,必须指定key

如果成功,在返回结果的data中解析数据

如果数据不存在,返回 errMsg: "getStorage:fail data not found"

wx.getStorage({
    key:'msg',
    success:res=>console.log(res),
    fail:err=>console.log(err),
    complete:()=>console.log('get done log')
})

建议获取数据 get,使用同步调用,减少异步操作带来的性能损耗

.如果数据不存在,返回字符串 hi

getMsgSync() {
    let msg = wx.getStorageSync('msg') || 'hi'
    this.setData({
        msg: msg
    })
}

.如果数据不存在,返回对象 {id:100,name:'glpla'}

getMsgSync() {
    let msg = wx.getStorageSync('msg') || {id:100,name:'glpla'}
    this.setData({
        msg: msg
    })
}

.如果数据不存在,返回数组 [0, 1, 2, 3, 4]

getMsgSync() {
    let msg = wx.getStorageSync('msg') || [0, 1, 2, 3, 4]
    this.setData({
        msg: msg
    })
}
删除指定数据 remove
wx.removeStorage(Object object)
wx.removeStorageSync(string key)

删除的时候,必须指定key

删除成功,返回errMsg: "removeStorage:ok"

wx.removeStorage({
    key: 'msg',
    success:res=>console.log(res),
    fail:err=>console.log(err),
    complete:()=>console.log('remove done log')
})
清除所有数据 clear
wx.clearStorage(Object object)
wx.clearStorageSync()

清除成功,返回 errMsg: "clearStorage:ok"

wx.clearStorage({
    success:res=>console.log(res),
    fail:err=>console.log(err),
    complete:()=>console.log('clear done log')
})
json数据的使用 - 直接存储和获取,无需序列化和解析
wx.setStorage({
    key: 'obj',
    data: {id:100,name:'glpla'},
    success: res => console.log('set',res),
    fail: err => console.log('set',err),
    complete: () => console.log('set done')
})
let obj = wx.getStorageSync('obj') || {id:100,name:'glpla'}